#c# #wpf #mvvm #combobox
#c# #wpf #mvvm #список со списком
Вопрос:
У меня есть редактируемый список со списком, MVVM. Мне нужен выпадающий список = true, когда я что-то пишу в выпадающем списке.
Text="{Binding textsearch, UpdateSourceTrigger=PropertyChanged}"
здесь в textsearch я написал OnPropertyChange для ComboBox IsDropDownOpen=true, но это работает только один раз, когда я выбираю строку, затем пытаюсь написать снова, выпадающий список = false и не реагирует на свойство…
Кроме того, когда я выбрал строку и изменил текст, я не могу снова выбрать эту строку, потому что она была выбрана, сначала мне нужно изменить выбранный элемент, но когда я меняю выбранный элемент, текст тоже меняется.
Как заставить фильтр работать?
Или, как в другом варианте, я добавил текстовое поле для фильтрации текста, но когда я пишу текст и вызываю свойство textsearch, текстовое поле теряет фокус, а поле со списком имеет этот фокус… как сохранить фокус на текстовом поле и выпадающем списке элементов списка со списком?
Ответ №1:
Самый простой способ сделать что-то подобное — обработать одно или несколько событий. Вы могли бы попытаться обработать PreviewTextInput
событие:
<ComboBox ItemsSource="{Binding Items}" IsEditable="True"
PreviewTextInput="ComboBox_PreviewTextInput" />
…
private void ComboBox_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
ComboBox comboBox = sender as ComboBox;
comboBox.IsDropDownOpen = true;
}
Код в этом обработчике событий будет открывать выпадающий список каждый раз, когда пользователь вводит ComboBox TextBox
. Возможно, вам потребуется обработать еще несколько событий, чтобы получить точное желаемое поведение, но вы можете увидеть, какие события доступны на странице событий со списком в MSDN, и выполнить это самостоятельно.