Разница в текстовом поле C # Wpf между TextChanged и PreviewTextInput - PullRequest
0 голосов
/ 09 октября 2018

В настоящее время я выполняю проверку для своего текстового поля, и я не уверен, какое событие выбрать, TextChanged или PreviewTextInput, поскольку, похоже, нет никакой разницы.

Чем эти события отличаются?

Ответы [ 2 ]

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

Событие PreviewTextInput запускается «когда TextBox получает текст независимо от устройства».Свойство text аргумента события PreviewTextInput (тип TextCompositionEventArgs) будет содержать только текст последнего входного действия.В случае ввода с клавиатуры это, скорее всего, будет одно нажатие клавиши и, следовательно, только один символ.Другие методы ввода, такие как голосовой ввод, могут вводить более одного символа за раз.

Событие TextChanged просматривает свойство Text TextBox и происходиткогда его текст меняется каким-либо образом.Его аргумент события типа TextChangedEventArgs содержит коллекцию объектов TextChange, которые содержат информацию об изменениях, которые были сделаны.

Что касается выбора для проверки, ответ ... ни .Поскольку вы хотите подтвердить, я могу только предположить, что вы будете использовать введенный текст в другом месте вашего проекта.В WPF предпочтение отдается архитектуре MVVM (то есть Model, View, ViewModel), что означает, что мы используем Bindings для ввода.Существует несколько способов проверки текста TextBox в MVVM, при этом я предпочел следующие методы: интерфейс IDataErrorInfo и Правила проверки привязки .Первый выполняет проверку после отправки текстовых данных в ViewModel, а второй будет проверять текст перед его отправкой в ​​ViewModel.

Надеюсь, это вам поможет!

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

Выдержка из документации фреймворка:

Событие UIElement.PreviewTextInput

Событие PreviewTextInput позволяет компоненту или приложению прослушиватьввод текста в зависимости от устройства.Клавиатура является основным средством PreviewTextInput;но речь, почерк и другие устройства ввода также могут генерировать PreviewTextInput.

Из-за комбинаций клавиш - либо на клавиатурах по умолчанию, либо через редакторы методов ввода - несколько событий клавиш могут вызывать только одно событие ввода текста.

Это событие создает псевдоним для вложенного события TextCompositionManager.PreviewTextInput для этого класса, так что PreviewTextInput является частью списка членов класса, когда UIElement наследуется как базовый элемент.Обработчики событий, которые прикреплены к событию PreviewTextInput, присоединяются к базовому вложенному событию TextCompositionManager.PreviewTextInput и получают тот же экземпляр данных события.

TextBoxBase.TextChanged Event

Для TextBox это событие происходит при изменении его текста;для RichTextBox это событие происходит, когда изменяется любое содержимое или форматирование (например, изображения, таблица или цвет фона).

Мои 2 цента:

Между этими двумя событиями есть большая разница.Событие TextChanged будет выполнено после того, как текстовое поле обработает текст и обновит элемент управления.С другой стороны, событие PreviewTextInput будет выполнено, когда вы сфокусируетесь на текстовом поле и выполните действие с преформой на устройстве ввода (например, на клавиатуре), прежде чем даже текстовое поле будет иметь представление о предстоящем вводе с устройства.

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