私は、ドメインサービスからエンティティを照会することで自分でフィルタリングするObservableCollection ItemsSourceにバインドされたAutoCompleteBoxを持っています。 Jeff WilcoxのブログからのWebサービス呼び出しからPopulatingEventArgs.CancelをTrueに設定するというシナリオを使用しました。コレクションが準備できたら、ACBでPopulateComplete()を呼び出します。Webサービスからの提案をリロードせずにSilverlight AutoCompleteBoxポップアップを再起動
私の目標はマウスオーバー(またはクリック)時にドロップダウンを再び開くことですが、ウェブからすべてのデータを再度読み込むことはありません。答えは、IsDropDownOpenをTrueに設定することでしたが、stackoverflowに関する質問が見つかりました。しかしこの場合、ACBの人口は再び始まり、別のコールがWebサービスに送られます。
もちろん、ユーザーが入力を開始すると、フィルタリングを再度実行する必要があります。 (例:「ric」と入力し、「rice」と「ricin」を選択すると、米を選択しますが、同じコレクションから別のものを選択したい場合は「ricin」とします。あなたはすでにメモリに "ric"を含む提案を持っています。再度ロードする必要はありません。)
IsDropDownOpenを設定する代わりに、単にPopulateComplete()メソッドを呼び出すという別の方法があります。これは私の望むものとまったく同じですが、少し失敗してしまいます。私のACBがフォーカスを失った後、ドロップダウンはマウスオーバー時に再び開かれません。 acbテキストボックスに戻ってクリックしても。
この問題を解決する方法はありますか?また、ACBに初めてフォーカスを当てたときにPopulateComplete()がドロップダウンリストを開くのはなぜですか?または、これは私の運がこのメソッドを呼び出すと、ドロップダウンを再開し、代わりにIsDropDownOpenプロパティを使用する必要があります(afaikこれは私のマウスオーバーでトリガされた偽の投入イベントと、PopulatingEventArgs.Cancelを呼び出す必要があることを示すフラグすぐにPopulateComplete。しかし、私はこれを動作させることができます(まだ試していない)、なぜ単純にPopulateCompleteを呼び出すときにそれを取得しないでください?