Отмена измененного события WPF TextBox - PullRequest
4 голосов
/ 02 декабря 2008

Я нахожусь в процессе изучения WPF из разработки WinForms.

У меня есть событие TextChanged, назначенное одному из моих TextBox в моем приложении WPF. Если пользователь вводит неверные данные, я хочу иметь возможность вернуться к предыдущему текстовому значению.

В прежние времена я бы заменил NewValue на OldValue, но, похоже, WPF работает не так.

Есть идеи о том, что я мог сделать, чтобы достичь этого? Я просто еще не думаю о WPF?

Спасибо.

Ответы [ 2 ]

22 голосов
/ 03 декабря 2008

Вы можете сделать это двумя способами:

  1. Прослушайте событие PreviewTextInput и установите e.Handled = true, чтобы остановить событие TextChanged.

  2. Использовать проверку WPF. Есть отличное сообщение Пола Стовелла о Codeproject и недавнее сообщение в его блоге

Эти статьи помогут вам начать. Одна вещь, с которой я столкнулся при первой проверке, состоит в том, что правило проверки запускается только тогда, когда привязка обновляет источник.

3 голосов
/ 03 декабря 2008

Я бы использовал PreviewTextInput, большинство событий в WPF имеют одноуровневый элемент Preview. Если вы установите e.Handled = true, это остановит событие от bubbelig / туннелирования в дальнейшем.

Я не уверен, что вы знаете об этом, но события предварительного просмотра, как говорят, туннелируют, т.е. они начинаются с самого внешнего контейнера и размещаются в каждом контейнере, пока не достигнут элемента управления, на котором находится фокус. События без предварительного просмотра называются всплывающими, т.е. они начинаются с элемента управления с фокусом и отправляются каждому родительскому элементу управления.

Если вы установите e.Handled = true в событии PreviewTextChanged внешней сетки, вы также отмените все другие события, включая TextChanged. Сначала все события предварительного просмотра запускаются из самого внешнего элемента управления с фокусом, затем все события без предварительного просмотра запускаются из элемента управления с фокусом и в самый внешний родительский элемент управления.

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