代码之家  ›  专栏  ›  技术社区  ›  Matthew King

C语言中自定义XML可序列化颜色类的数据绑定#

  •  1
  • Matthew King  · 技术社区  · 14 年前

    我有一个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控件属性数据绑定到这个类。 当我第一次添加数据绑定时,一切工作正常,但任何更改都没有得到正确的支持。

    例如,如果我将控件的背景色绑定到scolor,则背景色将被正确更新,等等。但是,如果我随后去更改背景色,则更改不会被传递到foo对象的scolor。如果我更改foo对象的scolor,则不会在控件的背景色上看到更改。

    将数据绑定到纯颜色属性可以根据需要工作。只是不适合序列化的颜色。

    我哪里做错了?

    1 回复  |  直到 14 年前
        1
  •  3
  •   Josh    14 年前

    您需要使SerializableColor类实现 INotifyPropertyChanged .

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

    另外,您应该真正实现 TypeConverter 如果希望Windows窗体能够双向转换为序列化颜色类型或从序列化颜色类型转换为序列化颜色类型。

    推荐文章