2010-12-14 6 views
1

Die folgende Methode eine Reihe von Artikeln aus meiner benutzerdefinierten beobachtbaren Sammlung entfernt:.NET NotifyCollectionChangedAction.Remove nicht aktualisiert Sammlung

public void RemoveRange(IList items) 
     {   

      foreach (T item in items) 
      { 
       this.Remove(item);    

      }     
       UpdateProcessingState(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, items)); 

     } 

Eventhandler für NotifyCollectionChanged ruft einfach CollectionView.Refresh(). Wenn ich dies tue, sind entfernte Elemente immer noch in meinem Raster.

Allerdings, wenn ich ein Element nach dem anderen entfernen und Sammlungsänderung Ereignis mit diesem auslösen;

new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, item) 

Raster aktualisiert ordnungsgemäß.

Habe ich etwas übersehen?

TIA.

Antwort

1

CollectionView unterstützt das CollectionChanged-Ereignis nicht ordnungsgemäß, wenn mehrere Elemente vorhanden sind. Ich habe das Gefühl, dass sie das nicht implementiert haben, da sie AddRange/RemoveRange auch nicht in ObservableCollection implementiert haben.

Sie können stattdessen versuchen, NotificationCollectionChangedAction.Reset zu verwenden. Seien Sie vorsichtig, wenn Sie mit riesigen Listen arbeiten, da bei der Zurücksetzung von Elementen mit der Sammlung alle Kosten neu gebunden werden müssen.

+0

Es stellt sich heraus, dass es etwas war, was ich falsch gemacht habe. NotifyCollectionChangedEventArgs (NotifyCollectionChangedAction.Remove, items) funktioniert gut. –

+1

@ e28Makaveli - Seltsam, weil das, was rossisdead sagt, richtig ist, sollte das nicht funktionieren, wenn du etwas an ListBox anbindest. Verwenden Sie .NET 4.0? Vielleicht wurde es dort vielleicht repariert? Ich bin immer noch auf .NET 3.5, also würde ich nicht wissen. – jpierson

Verwandte Themen