2010-12-14 3 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ためのEventHandlerは単にCollectionView.Refresh()を呼び出します。私がこれを行うと、削除されたアイテムはまだ私のグリッドにあります。

ただし、一度に1つのアイテムを削除してコレクションの変更イベントをこれで発生させると、

new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, item) 

グリッドが正しくリフレッシュされます。

私は何かを見逃しましたか?

TIA。

答えて

1

複数の項目がある場合、CollectionViewはCollectionChangedイベントを適切にサポートしません。 ObservableCollectionにAddRange/RemoveRangeを実装していないため、実装していないと感じます。

代わりにNotificationCollectionChangedAction.Resetを試すことができます。コレクションに関連するものはすべてのアイテムをリバインドする必要があるので、巨大なリストを扱っている場合は、リセットによるパフォーマンスコストがあることに注意してください。

+0

私が間違っていたものであったに違いありません。 NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove、items)は正常に動作します。 –

+1

@ e28Makaveli - 奇妙なことにrossisdeadがそうだと言っているので、ListBoxのようなものにバインドしていればうまくいきません。 .NET 4.0を使用していますか?たぶんそれはおそらくそこに修正されているでしょうか?私はまだ.NET 3.5にいるので、私は知らないだろう。 – jpierson

関連する問題