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中文网其他相关文章!