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月リリース)を使用しています。
ありがとうございました!