我希望能够添加一个范围,并获得整个批量更新。
我还希望能够在操作完成之前取消该操作(即,除了“已更改”之外,集合还会发生变化)。
相关Q Which .Net collection for adding multiple objects at once and getting notified?
发布于 2013-11-27 19:10:21
由于在ObservableCollection上可能有许多操作要做,例如,首先清除,然后清除AddRange,然后为ComboBox插入"All“项,我最终得到了以下解决方案:
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));
}
}
并举例说明如何使用它:
MyDogs.Execute(items =>
{
items.Clear();
items.AddRange(Context.Dogs);
items.Insert(0, new Dog { Id = 0, Name = "All Dogs" });
});
重置通知只会在Execute处理完底层列表之后调用一次。
https://stackoverflow.com/questions/670577
复制相似问题