如何获取ObservableCollection中的更改

22
public ObservableCollection<IndividualEntityCsidClidDetail> IncludedMembers { get; set; }

假设我有对IncludedMembers的引用,当集合项被添加/删除/编辑时,我希望发生事件。


你是在WPF或WinForms环境中使用集合吗?你想要实现什么?如果你在WPF中,绑定可能比事件处理更好。 - miguel
3个回答

44

处理CollectionChanged事件

//注册事件,使得每当集合发生更改时,都会调用CollectionChangedMethod方法

    yourCollection.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler 
(CollectionChangedMethod);

创建一个像这样的方法

private void CollectionChangedMethod(object sender, NotifyCollectionChangedEventArgs e)
{
       //different kind of changes that may have occurred in collection
       if(e.Action == NotifyCollectionChangedAction.Add)
        {
            //your code
        }
        if (e.Action == NotifyCollectionChangedAction.Replace)
        {
            //your code
        }
        if (e.Action == NotifyCollectionChangedAction.Remove)
        {
            //your code
        }
        if (e.Action == NotifyCollectionChangedAction.Move)
        {
            //your code
        }
}

1
这并不仅仅是在includeMembers中更改对象字段的简单变化。 - Piero Alberto
为了简化成员变量的更改,请在成员类中使用通知属性更改。 - Ace McCloud
NotifyCollectionChangedAction.Reset呢?它是否也会调用NotifyCollectionChangedAction.Remove呢? - Deantwo

5

只需注册到集合的CollectionChanged事件即可。当您添加或删除项目或以其他方式更改集合的内容时,它将引发事件。

如果您想在集合中的项目属性更改时接收事件,则需要确保项目首先是IObservable,然后Subscribe()到各个对象。


-3

这就是可观察集合的作用。

只需要将其绑定到集合上,你就完成了!


3
OP问如何监听集合中的更改。他没有讨论绑定... - Gabe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接