2011-03-30 52 views
2

在我的課堂我有一個ObservableCollection和我在聽它CollectionChanged事件。 事情是當我做Fou.ButtonData =一個ObservableCollection變量,CollectionChanged事件永遠不會被調用,CreateButtons()永遠不會發生。 我該如何做這項工作?的ObservableCollection CollectionChanged事件沒有引發

感謝

代碼

class Fou 
{ 
    private ObservableCollection<string> buttonData; 
    public ObservableCollection<string> ButtonData 
    { 
     get { return buttonData; } 
     set { buttonData = value; } 
    } 

    public Fou() 
    { 
     buttonData = new ObservableCollection<string>(); 
     buttonData.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(buttonData_CollectionChanged); 

    } 

    void buttonData_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) 
    { 
     CreateButtons(); 
    } 
    } 
+0

您如何提高事件?你添加或刪除集合中的東西嗎?請顯示相應的代碼。 – 2011-03-30 15:35:58

+0

什麼是CreateButtons()方法在做什麼? – Anuraj 2011-03-30 15:36:04

+0

CreateButtons()不會被調用,所以我不認爲它很重要 – mike 2011-03-30 15:39:20

回答

4

從它看起來像永遠不會引發事件,因爲ObservableCollection<string>不會真正改變了代碼示例。它被創建,它被分配給事件並在此之後從未實際修改過。是否有其他一些修改集合的代碼?

此外,還有在ButtonData二傳手的錯誤。您允許另一段代碼更改ObservableCollection<string>,但您沒有收聽它的CollectionChanged事件,也不會與前一個斷開連接。我會使這只是一個只讀的屬性或將其更改爲以下內容

public ObservableCollection<string> ButtonData 
{ 
    get { return buttonData; } 
    set 
    { 
    if (buttonData != null) { 
     buttonData.CollectionChanged -= buttonData_CollectionChanged; 
    } 
    buttonData = value; 
    if (buttonData != null) { 
     buttonData.CollectionChanged += buttonData_CollectionChanged; 
    } 
    } 
} 
+0

所以當你一個ObservableCollection設置到一組新的不是CollectionChanged事件的數據?看起來像是對我來說。 – mike 2011-03-30 15:44:24

+0

@mike它有一個'CollectionChanged'事件,但它在不同的實例上。你需要改變你的類聽新'的ObservableCollection '的事件 – JaredPar 2011-03-30 15:48:24

+2

你集應該真正做到前刪除事件處理程序和之前添加事件處理程序的空引用檢查。 – 2011-03-30 15:49:59

相關問題