相关疑难解决方法(0)

RemoveAll for ObservableCollections?

我正在寻找Linq方式(如List的RemoveAll方法),它可以从我的ObservableCollection中删除所选项目.

我太新了,无法为自己创建扩展方法.有没有办法从ObservableCollection中删除传递Lambda表达式的项目?

c# observablecollection removeall

68
推荐指数
4
解决办法
4万
查看次数

如何在ObservableCollection上引发CollectionChanged事件,并将更改的项目传递给它?

我有一个继承自的类,ObservableCollection并添加了一些其他方法,如AddRange和RemoveRange

我的基本方法调用是这样的:

public void AddRange(IEnumerable<T> collection)
{
    foreach (var i in collection) Items.Add(i);

    OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
}
Run Code Online (Sandbox Code Playgroud)

我的问题是我想要访问e.NewItems或者e.OldItems在CollectionChanged事件中对集合中的任何项目执行操作,并且NotifyCollectionChangedAction.Reset操作不会传递这些值

void Instances_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
    if (e.NewItems != null) // e.NewItems is always null
    {
        foreach (var item in e.NewItems)
        {
            if (item is EventInstanceModel)
                ((EventInstanceModel)item).ParentEvent = this;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我认为我可以使用NotifyCollectionChangedAction.Add而不是Reset,但是会引发Range actions are not supported异常

public void AddRange(IEnumerable<T> collection)
{
    var addedItems …
Run Code Online (Sandbox Code Playgroud)

c# wpf observablecollection inotifycollectionchanged

26
推荐指数
2
解决办法
4万
查看次数