KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
please note that I am trying to use NotifyCollectionChangedAction.Add action instead of .Reset. the latter does work, but it is not very efficient with large collections. so i subclassed ObservableCollection: public class SuspendableObservableCollection<T> : ObservableCollection<T> for some reason, this code: 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)); } } is throwing A collection Add event refers to item that does not belong to collection this appears to be a bug in BCL ? I can step through and see prior to calling OnCollectionChanged that new items are added to this.Items WOW just made a staggering discovery. None of these approaches worked for me (flush, addrange), because the error appears to be triggered ONLY if this collection is bound to my Listview!! 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!!! In conclusion, ObservableCollection does support adding incremental lists, but a ListView doesn't. Andyp figured out a workaround to make it work with CollectionView below, but since .Refresh() is called, that is no different than just calling OnCollectionChanged( .Reset )..
Tags (comma-separated)
Save Edits
Cancel