请注意,我正在尝试使用NotifyCollectionChangedAction.Add操作而不是.Reset。后者确实有效,但对大型馆藏来说效率不高。ObservableCollection:调用OnCollectionChanged与多个新项目
,所以我子类的ObservableCollection:
public class SuspendableObservableCollection<T> : ObservableCollection<T>
出于某种原因,这个代码:
private List<T> _cachedItems;
...
public void FlushCache() {
if (_cachedItems.Count > 0) {
foreach (var item in _cachedItems)
Items.Add(item);
OnCollectionChanged(new NotifyCollectionChangedEventArgs(
NotifyCollectionChangedAction.Add, (IList<T>)_cachedItems));
}
}
抛出 集合添加的事件是指不属于集合项目
这似乎是一个BU g BCL?调用OnCollectionChanged新的项目加入到this.Items
WOW
我可以逐步看到之前
刚刚作出了一个惊人的发现。这些方法都不适用于我(刷新,添加范围),因为只有当这个集合被绑定到我的列表视图时,错误才会被触发!
TestObservableCollection<Trade> testCollection = new TestObservableCollection<Trade>();
List<Trade> testTrades = new List<Trade>();
for (int i = 0; i < 200000; i++)
testTrades.Add(t);
testCollection.AddRange(testTrades); // no problems here..
_trades.AddRange(testTrades); // this one is bound to ListView .. BOOOM!!!
总之,ObservableCollection不支持添加增量列表,但ListView不支持。 Andyp想出了一个解决方法,使其与下面的CollectionView一起工作,但由于调用了.Refresh(),这与调用OnCollectionChanged(.Reset)没有什么不同。
为什么RemoveRange,AddRange触发重置?也许有人不明白删除,添加和重置意义之间的区别? – 2017-02-01 11:45:09