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

Han*_*ish 3 c# observablecollection inotifycollectionchanged inotifypropertychanged

我创建了一个 ObservableCollection<T> ,每当集合中对象的属性 (T: INPC) 发生更改时,它都会触发 CollectionChangedEvent。我想知道 T 的哪个属性触发了 CollectionChangedEvent,所以我尝试了以下操作:

    void item_PropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset, e));
    }
Run Code Online (Sandbox Code Playgroud)

我将 PropertyChangedEventArgs e 传递给 NotifyCollectionChangedEventArgs 的构造函数。

根据 Intellisense,第二个构造函数采用两个参数:NotifyCollectionChangedAction 和一个名为“changedObject”的对象,该对象被描述为“受更改影响的项目”。

所以我想我可以在 CollectionChangedEventHandler 中获取该对象并检查 PropertyName,但是哦!惊喜!NotifyCollectionChangedEventArgs 不公开“ChangedObject”属性(我可以看到 Action、NewItems、OldItems、NewStartingIndex、OldStartingIndex)。

关于如何实现这一目标有什么想法吗?顺便问一下,使用稍后无法访问的对象构造 NotifyCollectionChangedEventArgs 有什么用处?

Ric*_*ing 6

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

如果指定NotifyCollectionChangedAction.ResetchangedItem则参数必须为null,否则您将得到一个ArgumentException

如果您指定任何其他NotifyCollectionChangedAction值,您还将获得一个ArgumentException.