C#中的数据绑定自定义XML可序列化Color类

时间:2010-03-16 03:28:12

标签: c# data-binding xml-serialization colors system.drawing.color

我有一个类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属性数据绑定到此类。 当我第一次添加数据绑定时,一切正常,但任何更改都没有正确传播。

例如,如果我将Control的BackColor绑定到SColor,BackColor将正确更新,等等。但是,如果我然后更改BackColor,则更改将不会传播到Foo对象的SColor。如果我更改了Foo对象的SColor,则Control的BackColor上将不会显示更改。

数据绑定到普通颜色属性可以根据需要使用。只是不要使用SerializableColor。

我哪里错了?

1 个答案:

答案 0 :(得分:3)

您需要使SerializableColor类实现INotifyPropertyChanged

如果SColor完全更改为新的颜色实例,您还应该让Foo实现它。

此外,如果希望Windows窗体能够双向转换为SerializedColor类型,则应该真正实现TypeConverter