首頁 > 後端開發 > C++ > 如何有效通知 ObservableCollection 項屬性變更?

如何有效通知 ObservableCollection 項屬性變更?

Mary-Kate Olsen
發布: 2025-01-05 19:33:41
原創
207 人瀏覽過

How to Efficiently Notify an ObservableCollection of Item Property Changes?

如何在專案變更時通知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 });
    }
}
登入後複製
但是,TrulyObable>但是會引發整個集合的Reset 事件每當項目屬性發生變更時收集。這可能會對性能產生影響,並且可能不是所需的行為。

替代方法

另一種方法是直接為集合中的每個項目註冊屬性更改事件處理程序:

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板