首頁 >後端開發 >C++ >為什麼我的 ObservableCollection 不通知專案更改,如何修復它?

為什麼我的 ObservableCollection 不通知專案更改,如何修復它?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-04 10:15:34184瀏覽

Why Doesn't My ObservableCollection Notify on Item Changes, and How Can I Fix It?

為什麼通知 ObservableCollection 不能處理專案變更?

在尋找專案變更時通知 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn