Windows 8 用のアプリケーションを実装しています。xml から非常に多くのデータを検索します。
今のところ、テキスト ボックスとリスト ビューを使用して検索結果を表示していますが、テキスト ボックス イベント TextChanged を使用すると、入力された文字ごとに新しい検索が実行されるため、入力が遅くなります。
問題は、metro / modern ui で遅延を発生させ、1 文字ではなく数文字入力した後にイベントをトリガーする方法です。
Windows 8 用のアプリケーションを実装しています。xml から非常に多くのデータを検索します。
今のところ、テキスト ボックスとリスト ビューを使用して検索結果を表示していますが、テキスト ボックス イベント TextChanged を使用すると、入力された文字ごとに新しい検索が実行されるため、入力が遅くなります。
問題は、metro / modern ui で遅延を発生させ、1 文字ではなく数文字入力した後にイベントをトリガーする方法です。
UIを同期タスクとして停止させる可能性のあるものを実行することはお勧めしません。完了時にUIを更新するバックグラウンドタスクとして実行してみてください。詳細については、バックグラウンドタスクとTimeTriggerを参照してください。タスクが完了したら、コアディスパッチャーを使用し てUIを更新します。 コアディスパッチャーの例
独自の検索エクスペリエンスを作成しないでください。SearchPaneに接続して、そこで処理する必要があります。
SearchPane searchPane = SearchPane.GetForCurrentView();
searchPane.QuerySubmitted += searchPane_QuerySubmitted;
searchPane.SuggestionsRequested += searchPane_SuggestionsRequested;
その後、ハンドラーで必要に応じてイベントを処理できます。提案を提供していて、非同期で実行が遅いプロセスがある場合は、延期されます。
void searchPane_SuggestionsRequested(SearchPane sender, SearchPaneSuggestionsRequestedEventArgs args)
{
var deferral = args.Request.GetDeferral();
// do real time type ahead here
deferral.Complete();
}
void searchPane_QuerySubmitted(SearchPane sender, SearchPaneQuerySubmittedEventArgs args)
{
// complete search here
}
テキスト ボックスのテキスト変更イベントの代わりに、"Leave" イベントを使用しないのはなぜですか? よりスムーズになり、ユーザーがテキストボックス内での入力を終了したときになります。