我制作了一个ObservableCollection< T>每次更改集合(T:INPC)中对象的属性时,都会触发CollectionChangedEvent。我想知道T的哪个属性已经解雇了CollectionChangedEvent,所以我尝试了以下内容:
void item_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset, e));
}
我将PropertyChangedEventArgs e传递给NotifyCollectionChangedEventArgs的构造函数。
根据Intellisense,第二个构造函数有两个参数:一个NotifyCollectionChangedAction和一个名为“changedObject”的对象,它被描述为“受更改影响的项目”。
所以我认为我可以在CollectionChangedEventHandler中获取该对象并检查PropertyName,但是哦!惊喜! NotifyCollectionChangedEventArgs不公开“ChangedObject”属性(我可以看到Action,NewItems,OldItems,NewStartingIndex,OldStartingIndex)。
关于如何实现这一目标的任何想法?顺便说一句,它有什么用途来构造带有你以后无法访问的对象的NotifyCollectionChangedEventArgs?
答案 0 :(得分:2)
当您使用NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction, object)
构造函数时,changedItem
将位于NewItems
集合(如果您指定NotifyCollectionChangedAction.Add
)或OldItems
集合中(如果您指定NotifyCollectionChangedAction.Remove
)。
如果您指定NotifyCollectionChangedAction.Reset
,则changedItem
参数必须为null
,否则您将获得ArgumentException
。
如果您指定任何其他NotifyCollectionChangedAction
值,您还会获得ArgumentException
。