請注意,我正在嘗試使用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