2016-09-07 15 views
2

RemoveRangeを使用してObservableCollectionからすべてのアイテムを削除するとUIは更新されますが、少なくとも1つのアイテムが残っている場合は表示されません。 ObservableCollectionのソースコードhereを見ると、内部のItemsコレクションをリフレッシュするための作業が特定できませんでした。私は基本的にObservableCollectionをサブクラス化し、自分自身のOnCollectionChangedビヘイビアを実装してUIの問題を回避し、この問題に直面しています。この方向のアイデア? observablecollectionをリフレッシュする方法に関する任意のポインタ?ObservableCollectionをリフレッシュする

おかげで、短い監視可能なコレクションで ジェイ

答えて

0

は、基になるコレクションに加えられた変更のためのNotifyProperty変更イベントをトリガします。あなたは..あなたは、あなたがのInsertItem、RemoveItem、ClearItemsなどの実装が表示されます言及した監視可能なコレクションのソースコードで利用できるパブリックメソッドを見るのであれば、彼らは限りそれはのObservableCollectionではなくによって実装されていないRemoveRange方法としてOnPropertyChanged(IndexerName);

を呼び出しますしたがって、OnPropertyChanged(IndexerName);を呼び出さない基本的なListでは、UIの変更を監視しません。私は、範囲を削除するのではなく、アイテムをループして1つずつ削除することをお勧めします。

あなたはremoverangeのための実装を見ることができます - あなたのUIがOnCollectionChangedでアクティブにしたときにhttps://stackoverflow.com/a/670579/442444

+0

1つずつ削除するか、1つずつ追加するとパフォーマンスが低下します。バインドされたDataGridコントロールに対して3000以上のUI通知が発生し、UIがフリーズします。 –

+0

上記のリンクを参照すると、範囲に対して1回だけ通知する実装があります。 – CarbineCoder

+0

ありがとうございます。私はすでにそのリンクについて知っています。私は実際にそれを試して同じアプローチを続けても、私はUIに変更が見られません。 Items []とCountも変更されたプロパティを明示的に呼び出す。 –

1

あなたはNotifyCollectionChangedEventArgsOldItemsNewItemsを使用していますか?

ClearItems方法や@CarbineCoderの答えのリンクにRangeメソッドを追加/削除NotifyCollectionChangedEventArgsOldItemsNewItemsをすることはありません。 それはNotifyCollectionChangedAction.Resetしか持っていません。

あなたのUIコードがOldItemsNewItemsに変更された場合は、ClearItemsの呼び出しやカスタムで実装されているRangeメソッドのように動作しないと思います。

+0

これを試してみましょう! –

+0

エラーの祝福:コンストラクタは '置換'アクションのみをサポートします。 OldItemsとNewItemsでの見解は正しいようですが、Resetアクションを提供する方法はありません。 –

関連する問題