ObservableCollection事件似乎没有触发-为什么?

本文关键字:为什么 事件 ObservableCollection | 更新日期: 2023-09-27 18:13:03

这段代码有什么问题?点击button1不会导致消息框出现。

public partial class Form1 : Form
{
    public ObservableCollection<string> aCollection2 = new ObservableCollection<string>();
    myClass mc = new myClass();
    public Form1()
    {
        InitializeComponent();
        aCollection2.Add("a");
        aCollection2.Add("b");
    }

    private void button1_Click(object sender, EventArgs e)
    {
        mc.myCollection = aCollection2;
    }
    private void button2_Click(object sender, EventArgs e)
    {
        mc.myCollection.Clear();
    }
}

与myClass定义:

class myClass
{
    public ObservableCollection<string> myCollection = new ObservableCollection<string>();
    public myClass()
    {
        myCollection.CollectionChanged += Changed;
    }
    void Changed(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
    {
        MessageBox.Show(myCollection.Count.ToString());
    }
}

编辑:当我添加第三个按钮时:

private void button3_Click(object sender, EventArgs e)
{
    mc.myCollection.Add("a");
}

它确实显示了messageBox。button2也一样。但是在点击button1之后,再也不会开火了。怎么会?

ObservableCollection事件似乎没有触发-为什么?

您从字段初始化器中向原始ObservableCollection实例添加了一个事件处理程序。
您从未向表单中的新ObservableCollection实例添加事件处理程序。
因为原来的ObservableCollection永远不会改变,你的处理程序永远不会运行。

这就是为什么集合属性应该是只读的原因之一(它们应该是属性,而不是字段)