gpt4 book ai didi

C# ObservableCollection OnCollectionChanged 项目更改时不触发

转载 作者:太空狗 更新时间:2023-10-30 00:44:46 24 4
gpt4 key购买 nike

来自关于 OnCollectionChanged 的​​ MSDN:“在添加、删除、更改、移动或刷新整个列表时发生。”

我正在更改附加到驻留在我的集合中的对象的属性,但未触发 OnCollectionChanged。我正在 obj 类上实现 iNotifyPropertyChanged。

public class ObservableBatchCollection : ObservableCollection<BatchData>
{
protected override void OnCollectionChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
if(e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add)
{
foreach (BatchData item in e.NewItems)
{

}
}
base.OnCollectionChanged(e);
}

public ObservableBatchCollection(IEnumerable<BatchData> items)
: base(items)
{

}
}

对我来说,这意味着当集合中的项目发生更改时,例如对象的属性,应该触发此事件。然而,事实并非如此。我希望能够知道我的自定义集合中的项目何时更改,以便我可以在需要时对其执行计算。

有什么想法吗?

最佳答案

ObservableCollection<T>仅当集合本身发生变化 时才引发事件。集合中包含的内部状态发生变化的项目没有改变集合的结构,并且 ObservableCollection<T>不会举报的。

一个选择是继承ObservableCollection<T>并订阅每个项目的 OnPropertyChanged添加时的事件。在该处理程序中,您可以引发自定义事件,或回退到集合自己的 PropertyChanged事件。请注意,如果你真的走这条路,你应该添加一个通用约束,以便 T : INotifyPropertyChanged .

关于C# ObservableCollection OnCollectionChanged 项目更改时不触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7099050/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com