コンボボックスに自由に入力したい。入力を止めると、コンボボックス項目に入力依存の結果を入力する遅延タスクが発生します。問題は、私の入力がリストの最初の項目によって上書きされることです。入力を保持する方法はありますか?
私のサンプルコードは次のようになります:
public void PopulateCombo(JObject result)
{
Debug.WriteLine("Thread id: " + Thread.CurrentThread.ManagedThreadId);
cbSearch.Items.Clear();
if (result.Value<bool>("success") == true)
{
JArray arr = result.Value<JArray>("data");
for (int i = 0; i < arr.Count; i++)
{
JToken item = arr[i];
cbSearch.Items.Add(new ComboBoxItem( item.Value<string>("name"), item.Value<string>("_id")));
}
cbSearch.DroppedDown = true;
}
}
23.06に編集
私が実際にやろうとしていることの例を挙げています。
- コンボボックスが空です (項目がありません)
- ユーザーは、たとえば「ja」と入力し始めます。Combobox はクエリをバックエンドに送信します。呼び出しはユーザーの最後の入力から 1 秒の遅延で非同期であるため、問題になることはありません。
- 私のバックエンドはいくつかの結果を返します (Anton Jamison、James Aaron、James Hetfield など、50 に制限されています)
- ドロップダウンリストに結果を入力して開きたいのですが、コンボボックスのテキストとして「ja」を保持したいので、ユーザーは検索をさらに明確にすることができます。
- ユーザーは検索範囲を「ja h」に拡張します。バックエンドは James Hetfield で応答します。結果は 1 つの項目だけになり、コンボボックスのテキストを設定したり、上からの動作を維持したりできます。どちらが良いかはまだわかりません。
これはすべて実装されていますが、ステップ 4 で上記の関数を使用してコンボボックスに入力すると、コンボのテキストが「ja」からリストの最初の一致に変更されます。(例ではアントン・ジャミソン)。この動作を実装するための簡単なオプションがあったことはほぼ確実ですが、それが C# にあったかどうかはわかりません。
コメントについて :
- 良い試みでしたが失敗しました。コンボボックスの項目を入力すると、検索文字列がリストの最初の一致に変更されます。
- オートコンプリート機能を実装しようとはしていないと思います。
- DroppedDown についての良いキャッチ。編集版で動かします。