Подтвердить что ты не робот

Как получить события TextChanged из редактируемого ComboBox

У меня есть редактируемый ComboBox:

<ComboBox IsEditable="true"/>

Какое событие возникает при изменении отредактированного значения? Я пробовал TextInput, но это не решение.

4b9b3361

Ответ 1

<ComboBox IsEditable="True" TextBoxBase.TextChanged="ComboBox_TextChanged" />

... должен это сделать. (Предполагая, что вы хотите что-то, что будет срабатывать при каждом изменении текста, а затем, когда пользователь закончит ввод текста. В этом случае вам понадобится другое событие - возможно, событие LostFocus или что-то еще?)

Во всяком случае, причина, по которой работает выше XAML, заключается в том, что когда IsEditable установлен в true, ComboBox использует TextBox для отображения и редактирования текста. Событие TextBox TextChanged представляет собой событие барботирования - это означает, что он будет пузыриться через дерево элементов, чтобы мы могли обработать его непосредственно на ComboBox.

Единственным "сложным" битом является то, что ComboBox не выставляет событие TextChanged, но вы все равно можете определить обработчик для него с помощью прикрепленного события (следовательно, синтаксис TextBoxBase.TextChanged).

(Возможно, стоит отметить полноту, что если ComboBox содержит более одного TextBox, тогда обработчик будет вызываться всякий раз, когда любой из них изменил свой текст.)

Ответ 2

Основываясь на вышеприведенном подходе, я просмотрел сгенерированный код (XAML).

<ComboBox x:Name="myComboBox" IsEditable="True"/>

Добавьте к инициализации следующий код:

myComboBox.AddHandler(System.Windows.Controls.Primitives.TextBoxBase.TextChangedEvent, 
                      new System.Windows.Controls.TextChangedEventHandler(ComboBox_TextChanged));

Это отлично работает для меня, потому что мне нужен многоразовый ComboBox (раскрывающийся список SQL-Server), который инкапсулирует все поведение.

Ответ 3

Добавить --- >> TextBoxBase.TextChanged="ComboBox_TextChanged"

Ответ 4

Событие PreviewTextInput вызывается для каждого ввода с клавиатуры в ComboBox.

Ответ 5

Я хотел бы поблагодарить ответ от IanR и Girish Reddyvari, который заставил меня задуматься.

Я использую Caliburn Micro, и я пытаюсь получить ввод Editable ComboBox, пока они печатают. Caliburn Micro с трудом подхватил событие

 TextBoxBase.TextChanged

как мой опыт в xaml и интерактивности недостаточно хорош! Но это все-таки подхватило

  KeyUp

Мой код, использующий Caliburn Micro, отличается, но следующий код также должен работать

<ComboBox IsEditable="True" KeyUp="ComboBox_TextChanged" />