首頁 >後端開發 >C++ >為什麼觀察到兒童財產的變化不檢測?

為什麼觀察到兒童財產的變化不檢測?

Patricia Arquette
Patricia Arquette原創
2025-01-29 13:16:10500瀏覽

Why Doesn't ObservableCollection Detect Changes in Child Properties?

>解決observableCollection的限制,以兒童財產更改

>

C#中的標準ObservableCollection僅跟踪項目的添加和刪除。 即使這些項目實現,它也不會固有地監視這些項目的>屬性的更改。這會導致UI綁定在修改兒童財產時不會更新。 >INotifyPropertyChanged增強的觀測值:解決方案

> 為了解決這個問題,我們可以創建一個自定義集合類,讓我們稱其為,它擴展了

>的功能:

> TrulyObservableCollection ObservableCollection>此改進的類可確保添加項目時,它會訂閱其

>事件。 當屬性更改時,
<code class="language-csharp">public sealed class TrulyObservableCollection<T> : ObservableCollection<T>
    where T : INotifyPropertyChanged
{
    public TrulyObservableCollection() : base() { }

    protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs e)
    {
        if (e.Action == NotifyCollectionChangedAction.Add)
        {
            foreach (T item in e.NewItems)
            {
                item.PropertyChanged += ItemPropertyChanged;
            }
        }
        else if (e.Action == NotifyCollectionChangedAction.Remove)
        {
            foreach (T item in e.OldItems)
            {
                item.PropertyChanged -= ItemPropertyChanged;
            }
        }
        base.OnCollectionChanged(e);
    }

    private void ItemPropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Replace, sender, sender, IndexOf((T)sender)));
    }
}</code>
方法會在集合中觸發a

操作,從而有效地通知了變更的綁定UI元素。 刪除項目正確取消訂閱的事件以防止內存洩漏。 PropertyChanged> ItemPropertyChanged使用Replace>確保對項目本身和它們的屬性的更改反映在您的數據綁定中,從而產生更敏感和準確的UI。

以上是為什麼觀察到兒童財產的變化不檢測?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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