首页 >后端开发 >C++ >为什么观察到儿童财产的变化不检测?

为什么观察到儿童财产的变化不检测?

Patricia Arquette
Patricia Arquette原创
2025-01-29 13:16:10499浏览

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