簡體   English   中英

ObservableCollection CollectionChanged事件似乎沒有被解雇 - 為什么?

[英]ObservableCollection CollectionChanged event seems not to be firing – why?

這段代碼出了什么問題? 單擊button1不會導致出現messageBox。

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());
    }
}

編輯:當我添加第3個按鈕時:

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

它確實顯示了messageBox。 button2也是如此。 但點擊button1后 - 沒有人會再點火了。 怎么會?

您從字段初始值設定項向原始ObservableCollection實例添加了一個事件處理程序。
您從未向表單中的新ObservableCollection實例添加事件處理程序。
由於原始的ObservableCollection永遠不會更改,因此您的處理程序永遠不會運行。

這是集合屬性應該只讀的眾多原因之一( 它們應該是屬性,而不是字段

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM