2010-12-14 76 views
1

下面的方法從我觀察到的自定義刪除收集的各類物品:.NET NotifyCollectionChangedAction.Remove不刷新集合

public void RemoveRange(IList items) 
     {   

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

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

     } 

事件處理程序的NotifyCollectionChanged簡單地調用CollectionView.Refresh()。當我這樣做時,刪除的項目仍然在我的網格中。

但是,如果我一次刪除一個項目,並用此提升收集更改事件;

new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, item) 

正確刷新網格。

我錯過了什麼嗎?

TIA。

回答

1

當有多個項目時,CollectionView不能正確支持CollectionChanged事件。我感覺他們沒有實現,因爲他們沒有在ObservableCollection中實現AddRange/RemoveRange。

您可以嘗試改爲使用NotificationCollectionChangedAction.Reset。如果您正在處理大量列表,請謹慎使用重置時的性能成本,因爲與集合關聯的任何內容都必須重新綁定每個項目。

+0

原來它一定是我做錯了。 NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove,項目)工作正常。 – 2010-12-15 02:45:18

+1

@ e28Makaveli - 奇怪,因爲rossisdead所說的是正確的,如果你正在執行綁定到ListBox之類的東西,這不應該起作用。你在使用.NET 4.0嗎?也許如果有的話,它可能已經修復了嗎?我仍然在.NET 3.5上,所以我不知道。 – jpierson 2011-04-02 06:01:12