将其IsTextSearchEnabled设置为false后,WPF ComboBox的SelectedIndex不会更改

时间:2018-10-17 06:57:34

标签: wpf combobox autocomplete

假设我有一个名为ComboBox的{​​{1}}。

我想禁用comboBox的自动完成功能。

起初,我认为我需要做的就是将其ComboBox设置为IsTextSearchEnabled,如下所示

false

但是似乎这样做会引起一些意想不到的副作用。

comboBox.IsTextSearchEnabled = false; (组合框的默认设置)时,如果您尝试为IsTextSearchEnabled = true的{​​{1}}设置值,则组合框将在其ComboBox中找到相应的索引并相应地更新其Text

ItemsSource

现在,当我尝试设置SelectedIndex时,List<string> lst = new List<string>(); lst.Add("1"); lst.Add("2"); lst.Add("3"); lst.Add("4"); lst.Add("5"); MessageBox.Show(comboBox.SelectedIndex.ToString()); // -1 comboBox.ItemsSource = lst; comboBox.Text = "3"; MessageBox.Show(comboBox.SelectedIndex.ToString()); // 2 的{​​{1}}的{​​{1}}更改时不会更新。

IsTextSearchEnabled = false

我想知道是否有一种方法可以同时实现(即禁用“自动完成”功能,并且仍然让ComboBox在更改其Text时自动更新其SelectedIndex)

1 个答案:

答案 0 :(得分:0)

有几种方法可以达到它。在您使用字符串的情况下,只需设置Text属性即可,而无需设置SelectedValue

List<string> lst = new List<string>();
lst.Add("1");
lst.Add("2");
lst.Add("3");
lst.Add("4");
lst.Add("5");
MessageBox.Show(comboBox.SelectedIndex.ToString()); // -1
comboBox.IsTextSearchEnabled = false;
comboBox.ItemsSource = lst;
comboBox.SelectedValue = "3";
MessageBox.Show(comboBox.SelectedIndex.ToString()); // 2

如果您有更复杂的数据类型作为字符串,则还可以设置SelectedValuePath或在ItemsSource的事件处理程序中的TextInput中自己搜索它,并设置“ SelectedItem”。