首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ObservableCollection不支持AddRange方法,所以添加的每一项都会通知我,除了INotifyCollectionChanging呢?

ObservableCollection不支持AddRange方法,所以添加的每一项都会通知我,除了INotifyCollectionChanging呢?
EN

Stack Overflow用户
提问于 2009-03-22 05:08:44
回答 11查看 121.7K关注 0票数 183

我希望能够添加一个范围,并获得整个批量更新。

我还希望能够在操作完成之前取消该操作(即,除了“已更改”之外,集合还会发生变化)。

相关Q Which .Net collection for adding multiple objects at once and getting notified?

EN

Stack Overflow用户

发布于 2013-11-27 19:10:21

由于在ObservableCollection上可能有许多操作要做,例如,首先清除,然后清除AddRange,然后为ComboBox插入"All“项,我最终得到了以下解决方案:

代码语言:javascript
运行
复制
public static class LinqExtensions
{
    public static ICollection<T> AddRange<T>(this ICollection<T> source, IEnumerable<T> addSource)
    {
        foreach(T item in addSource)
        {
            source.Add(item);
        }

        return source;
    }
}

public class ExtendedObservableCollection<T>: ObservableCollection<T>
{
    public void Execute(Action<IList<T>> itemsAction)
    {
        itemsAction(Items);
        OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
    }
}

并举例说明如何使用它:

代码语言:javascript
运行
复制
MyDogs.Execute(items =>
{
    items.Clear();
    items.AddRange(Context.Dogs);
    items.Insert(0, new Dog { Id = 0, Name = "All Dogs" });
});

重置通知只会在Execute处理完底层列表之后调用一次。

票数 3
EN
查看全部 11 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/670577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档