Связывание с данными пользовательского XML-сериализуемого класса Color в C # - PullRequest
1 голос
/ 16 марта 2010

У меня есть класс SerializableColor, позволяющий мне сериализовать цвета XML.

public class SerializableColor
{

    // omitted constructors, etc. ...

    [XmlIgnore]
    public Color Color
    {
        get { return Color.FromArgb(this.Alpha, this.Red, this.Green, this.Blue); }
        set
        {
            this.Alpha = value.A;
            this.Red = value.R;
            this.Green = value.G;
            this.Blue = value.B;
        }
    }

    public int Alpha { get; set; }
    public int Red { get; set; }
    public int Green { get; set; }
    public int Blue { get; set; }
}

Теперь, например, рассмотрим класс Foo:

public class Foo 
{
    public SerializableColor SColor { get; set; }
}

Я хочу привязать данныенекоторые свойства WinForm Control для этого класса.Когда я впервые добавляю привязку данных, все работает нормально, но любые изменения распространяются некорректно.

Например, если я связываю BackColor элемента управления с SColor, BackColor будет корректно обновляться и т. Д.затем перейдите и измените BackColor, изменения не будут распространены на SColor объекта Foo.И если я изменю SColor объекта Foo, это изменение не будет видно на BackColor элемента управления.

Привязка данных к обычному свойству Color работает как нужно.Только не для SerializableColor.

Где я иду не так?

1 Ответ

3 голосов
/ 16 марта 2010

Вам нужно, чтобы ваш класс SerializableColor реализовал INotifyPropertyChanged .

Вы должны также заставить Foo реализовать его, если SColor полностью изменен на новый экземпляр цвета.

Кроме того, вам действительно следует реализовать TypeConverter , если вы хотите, чтобы Windows Forms могли двунаправленно преобразовывать в / из вашего типа SerializedColor.

...