11

大量のINotifyChangedPropertiesイベントが原因で、UIが多数更新される場合があります。その場合、すべてのプロパティがバッチのように設定されているときに、UIへの変更を1回だけ通知することができます。

ViewCollectionの更新を延期する方法を説明するこのすばらしい記事を見つけました。

http://marlongrech.wordpress.com/2008/11/22/icollectionview-explained/

ただし、ビューが延期され、コレクションに何かを追加しようとすると、例外が発生します。なぜこれが許されるべきでないのか分かりません。そもそもそれがポイントです。

InvalidoperationException: 更新が延期されている間は、CollectionViewの内容または現在の位置を変更または確認できません。

誰かがこの問題を解決する方法を知っていますか?どうもありがとう、

4

2 に答える 2

19

この件に関するMSDNヘルプを誤解している、または誤って伝えていると思います。彼らは、並べ替えやフィルタリングのために基になるコレクションを変更する必要はないと言っています。基になるコレクションを変更できないと言っているのではありません。OPには非常に有効なポイントがあります。ユーザー向けに並べ替えられてフィルタリングされた大規模なコレクションがあり、リストボックスに表示されます。ユーザーがそれらのレコードの範囲を選択してそれらを削除したい場合、ListCollectionViewが削除されたすべてのアイテムのビューを更新する状況に強制されます。

OPの質問は非常に有効だと思います。膨大なデータセットに複数のフィルターがあるため、パフォーマンスはひどいものです。DeferRefreshは、ListCollectionViewのようなクラスで実際の目的を持っていますが、最も必要なときに、挿入と削除を不可解に無効にすることができます。

于 2012-03-16T17:03:14.457 に答える
2

はい、問題のコレクションを変更しないでください。コレクションビューの目的を誤解していると思います。これはMSDNが言っていることです。

コレクションビューは、バインドされたソースコレクションの上のレイヤーと考えることができます。これにより、基になるソースコレクション自体を操作しなくても、並べ替え、フィルター、およびグループクエリに基づいてコレクションをナビゲートおよび表示できます。

つまり、コレクションの追加と削除、またはその他の操作が完了するまで、更新を延期しないでください。

于 2011-05-17T14:55:09.477 に答える