1

ビュー内のコントロールにバインドされたObservableCollection(OC)を持つViewModelがあるとします。

バインディングを削除せずに、OCとコントロール間のバインディングを一時的に無効にする方法はありますか?ビューに通知せずにObservableCollectionを変更できるようにしたい。

その理由は単純です。私はOCで多くのAdd()およびInsert()操作を行っています。ほとんどの場合、すべてがOKですが、時々Add()を頻繁に呼び出しているため、ビューの更新が不快に見えます。これらの期間は、事前にバインディングを「オフ」にし、後で「オン」にします。

誰かが同じような状況にありましたか/誰かがヒントを持っていますか?

4

2 に答える 2

4

まとめてObservableCollection(それから継承しても)、要件を考慮してイベントトリガーを延期するカスタムロジックを追加してメソッドをオーバーライドOnCollectionChangedします。これは、独自の定義可能な監視可能なコレクションを実装するための非常に標準的な方法だと思います。

于 2012-07-13T16:12:17.373 に答える
1

コレクションに多くのアイテムがある場合、List<> を CollectionViewSource のソースとして使用することを好みます。次に、ビューが CollectionViewSource.View にバインドされます。CollectionViewSource には DeferRefresh() および Refresh() メソッドがあり、ビュー通知なしでソース リストを変更するすべてのバックグラウンド作業を実行できます。CollectionViewSource のパフォーマンスは、ObservableCollection よりもはるかに優れているだけでなく、フィルタリングもサポートしています。アイテムを常に追加および削除している場合は、フィルタリングが必要になる場合があります。

于 2012-07-13T18:20:02.440 に答える