SelectedIndex WPF ComboBox не изменяется после установки его IsTextSearchEnabled в false - PullRequest
0 голосов
/ 17 октября 2018

Допустим, у меня есть ComboBox с именем comboBox.

. Я хочу отключить функцию автозаполнения ComboBox.

Сначала я подумал, что все, что мне нужноdo устанавливает IsTextSearchEnabled на false следующим образом

comboBox.IsTextSearchEnabled = false;

Но, похоже, это вызывает некоторые неожиданные побочные эффекты.

Когда IsTextSearchEnabled = true (по умолчанию используется в выпадающем списке)если вы попытаетесь установить значение для 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

Теперь, когда я попыталсячтобы установить IsTextSearchEnabled = false, ComboBox SelectedIndex не будет обновляться при изменении Text.

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.Text = "3";
MessageBox.Show(comboBox.SelectedIndex.ToString()); // -1

Интересно, есть ли способ достичь того и другого (т.е. отключить AutoЗавершите функцию, и ComboBox по-прежнему будет автоматически обновлять свой SelectedIndex при изменении его текста)

1 Ответ

0 голосов
/ 17 октября 2018

Есть несколько способов достичь этого.В вашем случае со строками достаточно установить не свойство 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 и установите «Выбранный элемент».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...