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