2013-02-24 54 views
4

有一種方法可以在將項目添加到ObservableCollection時觸發事件,但在刪除項目時不會觸發事件?ObservableCollection事件添加但未刪除的項目

我相信沒有一個實際的事件,但也許是一種過濾CollectionChanged事件的方法?

+0

爲什麼不使用List並手動處理NotifyPropertyChange? – 2013-02-24 19:35:34

+0

我可以創建一個自定義類,繼承List,並將該事件添加到Add()和AddRange()? – Wilson 2013-02-24 19:37:07

回答

1

子類ObservableCollection類和創建自己的ItemAdded事件應該工作,我會想。

public class MyObservableCollection<T> : ObservableCollection<T> 
{ 
    public event EventHandler<NotifyCollectionChangedEventArgs> ItemAdded; 

    public MyObservableCollection() 
    { 
     CollectionChanged += MyObservableCollection_CollectionChanged; 
    } 

    void MyObservableCollection_CollectionChanged(object sender,   NotifyCollectionChangedEventArgs e) 
    { 
     if (e.Action == NotifyCollectionChangedAction.Add) 
      ItemAdded(sender, e); 
    } 
} 
+2

如果子類化,最好重寫'OnCollectionChanged()'方法來添加這個邏輯。這會阻止客戶端代碼刪除處理程序。 – 2013-02-24 20:50:28

11

CollectionChanged事件包括諸如關於收集執行什麼動作(例如,添加或刪除),並影響了什麼項目。

只需在您的處理程序中添加一個檢查,以僅在執行Add時執行所需的操作。

ObservableCollection<T> myObservable = ...; 
myObservable.CollectionChanged += (sender, e) => 
{ 
    if (e.Action == NotifyCollectionChangedAction.Add) 
    { 
     // do stuff 
    } 
}; 
相關問題