【问题标题】:How to get the changed item in the NotifyCollectionChangedEventArgs?如何在 NotifyCollectionChangedEventArgs 中获取更改的项目?
【发布时间】:2012-12-25 04:09:49
【问题描述】:

我已经创建了一个 ObservableCollection,每次更改集合中对象的属性 (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 有什么用?

【问题讨论】:

  • 提示:NewItems 和 OldItems。

标签: c# observablecollection inotifypropertychanged inotifycollectionchanged


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 2013-12-25
    • 2016-08-09
    • 2020-08-10
    • 2012-10-31
    • 2020-08-21
    相关资源
    最近更新 更多