Как заставить новое свойство быть сериализованным в designer.cs - PullRequest
0 голосов
/ 06 мая 2011

Я добавил новое свойство в компонент для уникальной идентификации каждого gridcontrol в моем проекте, которое называется GridIdentifier:

public class MyCustomGridControl : GridControl
{
    private string gridIdentifier = "empty";

    [Browsable(true)]
    [DefaultValue("empty")]
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
    public string GridIdentifier
    {
        get { return gridIdentifier; }
        set { gridIdentifier = value; }
    }

    public MyCustomGridControl()
    {
        if (this.gridIdentifier == "empty")
            this.gridIdentifier = Guid.NewGuid().ToString();
    }
}

Проблема в том, что для существующих элементов управления в моих формах форма только сериализует новое свойствопосле того, как я что-то изменил (читай: что угодно) внутри формы.Это может быть заголовок формы, размера и т. Д.

Но я хотел бы видеть, что он обнаруживает, что форма изменилась при открытии, поэтому я могу сохранить ее и новое свойство.сериализуется.

Кто-нибудь знает, почему новое свойство не сохраняется после открытия формы и как это исправить?Любые другие идеи, которые помогают, конечно, также приветствуются.

1 Ответ

0 голосов
/ 06 мая 2011

Я бы предположил, что он выполняет базовую проверку работоспособности (т. Е. , если что-либо изменилось) - чтобы предотвратить неожиданные изменения исходного кода (я ненавижу , это может привести кэффекты - я смотрю на тебя, DBML!).

Кстати, для принудительной сериализации обычно (я не думаю, что она будет применяться из-за вышеизложенного):

public bool ShouldSerializeGridIdentifier() { return true; }

bool ShouldSerialize*() и void Reset*() - это соглашение, используемое фреймворком.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...