2

我制作了一个 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 有什么用?

4

1 回答 1

5

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

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

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

于 2013-01-10T17:28:04.877 回答