我想在组合框中自由输入。当我停止输入时,我有一个延迟的任务,它用一些输入相关的结果填充组合框项目。问题是我的输入被列表中的第一项覆盖。有没有办法保留我的输入?
我的示例代码是这样的:
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”。组合框向我的后端发送查询。应该不是问题,因为调用是异步的,在用户最后一次输入后有 1 秒的延迟。
- 我的后端返回一些结果(Anton Jamison、James Aaron、James Hetfield 等,限制为 50)
- 我想用结果填充下拉列表,打开它,但作为组合框文本,我想保留“ja”,以便用户可以进一步澄清他的搜索。
- 用户扩展了他的搜索“ja h”。后端以 James Hetfield 响应。现在的结果只有一项,我现在可以设置组合框文本或保留上面的行为。不确定哪个会更好。
所有这些都已实现,但在第 4 步,当我使用上面的函数填充组合框时,组合的文本从“ja”更改为列表的第一个匹配项。(示例中的安东·贾米森)。我几乎可以肯定有一个简单的选项可以实现这种行为,但我不确定它是否在 C# 中。
关于评论:
- 这是一个很好的尝试,但没有成功。填充组合框项目后,我的搜索字符串将更改为列表的第一个匹配项。
- 我想我不会尝试实现自动完成功能。
- 关于 DroppedDown 的好消息。我将它移到编辑版本中。