如何在NotifyCollectionChangedEventArgs中获取更改的项目?

时间:2013-01-10 17:19:37

标签: c# observablecollection inotifypropertychanged inotifycollectionchanged

我制作了一个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?

1 个答案:

答案 0 :(得分:2)

当您使用NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction, object)构造函数时,changedItem将位于NewItems集合(如果您指定NotifyCollectionChangedAction.Add)或OldItems集合中(如果您指定NotifyCollectionChangedAction.Remove)。

如果您指定NotifyCollectionChangedAction.Reset,则changedItem参数必须为null,否则您将获得ArgumentException

如果您指定任何其他NotifyCollectionChangedAction值,您还会获得ArgumentException