当我的窗口加载时,我有一个填充的 ObservableCollection,并且 PropertyChanged 事件被添加到每个项目。但是,在初始加载项目之后可以将其添加到 ObservableCollection。我希望能够监听 ObservableCollection 上的集合更改,检查是否添加了项目,然后在添加时附加事件监听器。
为此,我希望能够检查是否为每个单独的项目定义了 PropertyChanged 属性,如果没有,则附加一个 PropertyChanged 事件。
这是我的代码:
items.CollectionChanged += (object sender, NotifyCollectionChangedEventArgs e) =>
{
foreach (var item in items.Where(o => o.PropertyChanged == null)) //error here
{
item.PropertyChanged += Item_PropertyChanged;
}
};
但是,我收到一个编译错误:
The event 'ModelBase.PropertyChanged' can only appear on the left hand side of += or -=
关于如何检查一个对象是否定义了它的 PropertyChanged 属性事件有什么想法吗?
最佳答案
您可以迭代 NotifyCollectionChangedEventArgs 的 OldItems
和 NewItems
属性。
对于 System.Collections.ObjectModel.ObservableCollection
,这适用于 e.Action
的所有值,NotifyCollectionChangedAction.Reset
除外。
items.CollectionChanged += (s, e) =>
{
if (e.OldItems != null)
{
foreach (var item in e.OldItems.OfType<INotifyPropertyChanged>())
{
item.PropertyChanged -= Item_PropertyChanged;
}
}
if (e.NewItems != null)
{
foreach (var item in e.NewItems.OfType<INotifyPropertyChanged>())
{
item.PropertyChanged += Item_PropertyChanged;
}
}
};
关于c# - 检查对象是否附加了 PropertyChanged 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48953416/