如何在專案變更時通知ObservableCollection
.NET 中的ObservableCollection 類別提供了一種追蹤集合變更的方法,例如新增或變更集合的方法,例如新增或變更集合移除物品。但是,它不會自動偵測集合中項目屬性的變更。
為了解決此問題,存在自訂實現,例如問題中提到的 TrulyObservableCollection。此類別擴展了 ObservableCollection,並為從集合中新增和刪除的項目新增了事件處理程序。它還追蹤單個項目的屬性變更。
實作和使用
要使用TrulyObservableCollection,您首先需要建立一個實例並用專案填滿它:
public class MyViewModel { public TrulyObservableCollection<MyType> MyItemsSource { get; set; } public MyViewModel() { MyItemsSource = new TrulyObservableCollection<MyType>(); MyItemsSource.Add(new MyType() { MyProperty = false }); MyItemsSource.Add(new MyType() { MyProperty = true }); MyItemsSource.Add(new MyType() { MyProperty = false }); } }
替代方法
另一種方法是直接為集合中的每個項目註冊屬性更改事件處理程序:public class MyViewModel { public ObservableCollection<MyType> MyItemsSource { get; set; } public MyViewModel() { MyItemsSource = new ObservableCollection<MyType>(); MyItemsSource.CollectionChanged += MyItemsSource_CollectionChanged; MyItemsSource.Add(new MyType() { MyProperty = false }); MyItemsSource.Add(new MyType() { MyProperty = true }); MyItemsSource.Add(new MyType() { MyProperty = false }); } private void MyItemsSource_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { if (e.NewItems != null) foreach (MyType item in e.NewItems) item.PropertyChanged += MyType_PropertyChanged; if (e.OldItems != null) foreach (MyType item in e.OldItems) item.PropertyChanged -= MyType_PropertyChanged; } private void MyType_PropertyChanged(object sender, PropertyChangedEventArgs e) { if (e.PropertyName == "MyProperty") DoWork(); // Perform desired action } }
以上是如何有效通知 ObservableCollection 項屬性變更?的詳細內容。更多資訊請關注PHP中文網其他相關文章!