title: ObservableCollection : calling OnCollectionChanged with multiple new items
body: <p>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. </p>
  
  <p>so i subclassed ObservableCollection:</p>
  
  <pre><code>public class SuspendableObservableCollection&lt;T&gt; : ObservableCollection&lt;T&gt;
  </code></pre>
  
  <p>for some reason, this code:</p>
  
  <pre><code>private List&lt;T&gt; _cachedItems;
  ...
  
      public void FlushCache() {
          if (_cachedItems.Count &gt; 0) {
  
          foreach (var item in _cachedItems)
              Items.Add(item);
  
          OnCollectionChanged(new NotifyCollectionChangedEventArgs(
              NotifyCollectionChangedAction.Add, (IList&lt;T&gt;)_cachedItems));
          }
      }
  </code></pre>
  
  <p>is throwing 
  <strong><em>A collection Add event refers to item that does not belong to collection</em></strong></p>
  
  <p>this appears to be a bug in BCL ? </p>
  
  <p>I can step through and see prior to calling OnCollectionChanged that new items are added to  this.Items </p>
  
  <p><strong>WOW</strong></p>
  
  <p>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!! </p>
  
  <pre><code>TestObservableCollection&lt;Trade&gt; testCollection = new TestObservableCollection&lt;Trade&gt;();
  List&lt;Trade&gt; testTrades = new List&lt;Trade&gt;();
  
  for (int i = 0; i &lt; 200000; i++) 
      testTrades.Add(t);
  
  testCollection.AddRange(testTrades); // no problems here.. 
  _trades.AddRange(testTrades); // this one is bound to ListView .. BOOOM!!!
  </code></pre>
  
  <p>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 )..  </p>