C#自定义控件属性修改

自定义控件在一个项目中引用多个,修改其中一个的某个属性时,其他所有的引用的这个属性也跟着一起变化


        [Category("2、颜色集合"), Description("设置颜色及其对应文本")]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), MergableProperty(false)]

        public ObservableCollection<MyColorItems> ColorDatas
        {
            get{  return myColorItems;  }
            set
            {
                ObservableCollection<MyColorItems> listt = value;
                myColorItems.Clear();
                foreach (var ii in listt)
                {
                    myColorItems.Add(ii);
                }
            }
        }

        [Serializable]
        public class MyColorItems
        {
            [Description("对应文本"), Browsable(true)]
            public string Name { get; set; }

            [Description("颜色"), Browsable(true)]
            public Color myColor { get; set; }

            public MyColorItems() { }
            public MyColorItems(string name, Color cc)
            {
                Name = name;
                myColor = cc;
            }
        }

这个属性在Collection Changed事件中监听修改
单个只用一个的话能够正常使用,用多个的话只有这个属性会一起变,其他属性正常

难道不对吗?
控件 是对象,自然是传递引用的
你应该在需要的地方都实例化一个,而不是传来传去


        private static MyColorItems color1 = new MyColorItems("color1", Color.LightGreen);
        private static MyColorItems color2 = new MyColorItems("color2", Color.Blue);
        private static MyColorItems color3 = new MyColorItems("color3", Color.Red);
        private static MyColorItems color4 = new MyColorItems("color4", Color.Gray);
        private static List<MyColorItems> listt = new List<MyColorItems>() { color1, color2, color3, color4 };
        private static List<MyColorItems> listt1 = new List<MyColorItems>() { color1, color2, color3 };

        private void button1_Click(object sender, EventArgs e)
        {
            StatusS.Status11 sts1 = new StatusS.Status11();
            sts1.ColorDatas = new ObservableCollection<MyColorItems>(listt);
            sts1.Row = 4;
            sts1.Column = 5;
            sts1.Location = new Point(0, 0);
            sts1.Size = new Size(200, 200);
            this.Controls.Add(sts1);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            StatusS.Status11 sts2 = new StatusS.Status11();
            sts2.ColorDatas = new ObservableCollection<MyColorItems>(listt1);
            sts2.Row = 3;
            sts2.Column = 4;
            sts2.Location = new Point(400, 0);
            sts2.Size = new Size(200, 200);
            this.Controls.Add(sts2);
        }

这样也不行,添加第一个之后,再添加第二个然后第一个颜色集合就变成跟第二个一样了