1

WPFAutoCompleteBoxにデータ仮想化を実装しようとしています。ここで、ListViewでうまく機能するBea Stollnitzのコードを見つけ、ComboBoxで簡単に機能するようにしましたが、AutoCompleteBoxで正しく機能するように見える方法はありません。

正確には、それは機能します-リストは仮想化され、アイテムは起動時にすべてロードされません-しかし、発生するように見えるのは、ItemsSourceが変更されるとすぐにAutoCompleteBoxがリスト内のすべてのアイテムを反復し、これが全体を壊してしまうことです(つまり、ロード時に、リスト内のすべてのページが要求されるため、仮想化されていても、最初にすべて要求されてロードされます)。私の推測では、これはACBoxが行うフィルタリングによるものですが、コントロールでは通常、Populatingイベントを使用してサーバー側でフィルタリングを実行できるため、これを防ぐ方法がないことに驚いています。

何かが足りないと感じたり、これまで誰もこのようなことをしたことがない、またはできないとは信じられないので、明らかに間違ったことをしているだけだと思います。私はWPFを初めて使用するので、理解できません。

これをまとめるために私が行ったことのいくつかを次に示します(同様の問題に関するインターネット検索に基づいています)。

  • 組み込みのUI仮想化のすべての条件が正常であることを確認しました。これには、明示的にオンにする、リストボックスの最大高さを設定するなどが含まれます。

  • AutoCompleteBoxのListBoxを、Beaが例で使用しているようなListViewに置き換えました。並べて表示すると、ListView自体は期待どおりに機能しますが、ACBoxに埋め込まれているものは機能しません。

  • ACBoxでフィルタリングを使用しない、カスタムフィルタを使用する、入力する偶数を手動で処理するなどを試しました。これは役に立ちません。カスタムフィルターでは1つのアイテムの評価結果しか指定できないため、カスタムフィルターを作成するだけでは明らかに不十分です。リストをループするコードは表示されないため、ループを防ぐことはできません。フィルタを「なし」に切り替えても、何も起こりません。

ありとあらゆる提案を歓迎します!

このターゲットは.NET3.5であり、WPF Toolkit(2010年2月リリース)を使用しています。

ありがとうございました!

4

1 に答える 1

0

これをOnItemsSourceChanged()まで追跡しました(ソースを参照)。そこに、AutocompleteBoxは「データのローカルキャッシュコピー」を格納します。これが、上記の動作が表示される理由です。これはプライベートメソッドなので、ここでオーバーライドすることはありません。

このため、少なくともBeaのソリューションのアイデアを使用しない限り、AutoCompleteBoxにDataVirtualizationを適用することはできないように思われます。誰かがこれについて何か違う考えを持っているなら、私はそれを試してみたいですが、それまでは、これが答えであると私は信じています。

于 2011-08-26T13:14:49.383 に答える