>解决observableCollection的限制,以儿童财产更改
>C#中的标准ObservableCollection
仅跟踪项目的添加和删除。 即使这些项目实现,它也不会固有地监视这些项目的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中文网其他相关文章!