在尋找專案變更時通知 ObservableCollection 的解決方案時,您偶然發現了 TrulyObservableCollection,它是旨在解決這個特定問題。但是,在專案中實現此類後,您意識到集合通知沒有被觸發。
經過調查,很明顯問題的根源在於 MyViewModel 類別中的 MyItemsSource 屬性。雖然您已實作 INotifyPropertyChanged 接口,但尚未包含觸發屬性變更事件所需的程式碼。具體來說,您缺少在集合變更時呼叫 RaisePropertyChangedEvent("MyItemsSource") 的程式碼。
要解決此問題,您可以將以下行新增至MyItemsSource 屬性的設定器中:
private TrulyObservableCollection<MyType> myItemsSource; public TrulyObservableCollection<MyType> MyItemsSource { get { return myItemsSource; } set { myItemsSource = value; // Code to trig on item change... RaisePropertyChangedEvent("MyItemsSource"); } }
但是,不建議使用此方法,因為每當集合變更時,無論是否是由於項目更改,它都會觸發屬性更改事件或其他一些更改。
另一個更有效的方法是使用 TrulyObservableCollection 的 CollectionChanged 事件為集合中每個項目的 PropertyChanged 事件註冊處理程序。這樣,您可以選擇性地處理單一項目的屬性更改,而不是觸發整個集合的重置。
以下程式碼片段說明了這個方法:
public MyViewModel() { MyItemsSource = new TrulyObservableCollection<MyType>(); MyItemsSource.CollectionChanged += MyItemsSource_CollectionChanged; MyItemsSource.Add(new MyType() { MyProperty = false }); MyItemsSource.Add(new MyType() { MyProperty = true}); MyItemsSource.Add(new MyType() { MyProperty = false }); } void MyItemsSource_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { // Handle here }
以上是為什麼我的 ObservableCollection 不通知專案更改,如何修復它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!