首頁 > 後端開發 > C++ > 為什麼當項目的屬性更改時,我的觀察力計算不更新?

為什麼當項目的屬性更改時,我的觀察力計算不更新?

DDD
發布: 2025-01-29 13:26:09
原創
933 人瀏覽過

Why Doesn't My ObservableCollection Update When an Item's Property Changes?

ObservableCollection 的項目屬性更改問題

在提供的代碼中,當項目屬性 (IsRowChecked) 更改時,ObservableCollection (ContentList) 不會收到通知。這導致調試器不會在所需位置停止。

原因

問題在於 ObservableCollection 追踪更改的方式。它只監視集合本身的更改,例如添加或刪除項目。默認情況下,不會註冊單個項目屬性的更改。

解決方案

要解決此問題,您可以使用監視其項目屬性更改的自定義 ObservableCollection 實現。這是一個使用名為 TrulyObservableCollection 的自定義類的解決方案:

<code class="language-csharp">public sealed class TrulyObservableCollection<T> : ObservableCollection<T>
    where T : INotifyPropertyChanged
{
    // 为简洁起见,省略构造函数和其他样板代码

    private void FullObservableCollectionCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
    {
        // 订阅新项目的 PropertyChanged 事件
        if (e.NewItems != null)
        {
            foreach (Object item in e.NewItems)
            {
                ((INotifyPropertyChanged)item).PropertyChanged += ItemPropertyChanged;
            }
        }

        // 取消订阅已删除项目的 PropertyChanged 事件
        if (e.OldItems != null)
        {
            foreach (Object item in e.OldItems)
            {
                ((INotifyPropertyChanged)item).PropertyChanged -= ItemPropertyChanged;
            }
        }
    }

    private void ItemPropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        // 通知集合项目已更改
        NotifyCollectionChangedEventArgs args = new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Replace, sender, sender, IndexOf((T)sender));
        OnCollectionChanged(args);
    }
}</code>
登入後複製

通過使用 TrulyObservableCollection,您的 ObservableCollection 將在項目屬性更改時收到通知,允許您在視圖模型中做出相應的反應。

以上是為什麼當項目的屬性更改時,我的觀察力計算不更新?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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