Действительно ли возможно знать, изменилось ли какое-либо из значений текстового поля в приложении. У меня есть приблизительно 30 текстовых полей, и я хочу выполнить часть кода, только если, любое значение текстовых полей изменилось из 30. Есть ли способ, которым я могу знать это.
Каждое текстовое поле вызывает событие TextChanged
при изменении его содержимого. Однако это требует, чтобы вы подписывались на каждое событие.
Хорошая новость в том, что вы можете подписаться на событие одним и тем же методом несколько раз. В обработчике есть параметр отправитель
, который вы можете использовать, чтобы определить, какое из ваших 30 текстовых полей действительно вызвало событие.
Вы также можете использовать события GotFocus и LostFocus , чтобы отслеживать фактические изменения. Вам нужно будет сохранить исходное значение на GotFocus
, а затем сравнить с текущим значением на LostFocus
. Это решает проблему двух событий TextChanged
, отменяющих друг друга.
Вы можете назначить обработчик события для каждого из событий TextBox's TextChanged. Все они могут быть назначены на один и тот же обработчик событий в коде. Тогда вы будете знать, когда текст изменится. Вы можете установить в своем классе поле с булевым флагом, чтобы записать, что произошло изменение.
попробуйте это. Добавьте этот код в загрузку / конструктор. нет необходимости явно указывать событие в XAML
this.AddHandler(TextBox.TextChangedEvent, new TextChangedEventHandler(TextChanged));
private void TextChanged(object Sender, TextChangedEventArgs e)
{
//ToDO (use sender to identify the actuale text from where it fired }
}
Это, возможно, грубая и готовая сторона, но я сделал это таким образом.
В конструкторе я создал
bool bChanged = false;
В обработчике событий TextChanged каждого элемента управления (фактически одинакового для каждого) я помещаю
bChanged = true;
Когда это необходимо, Я мог бы немного обработать и вернуть bChanged обратно в false.