#c# #wpf #uwp #textbox #textchanged
Вопрос:
Мы используем текстовое поле для отображения входных данных, полученных от системы ввода-вывода. Если пользователь введет некоторые данные в текстовое поле, значение будет записано в систему ввода-вывода.
Мы используем событие onTextChanged для записи данных, введенных пользователем, в систему ввода-вывода.
Проблема в том, что мы получаем это событие, когда обновляем значение, полученное от системы ввода-вывода, в текстовое поле (из кода).
Можно ли узнать, изменено ли значение текстового поля пользователем или с помощью кода?
Комментарии:
1. Используйте привязки и MVVM. Не принимайте во внимание логику.
2. Нет, мне нужно найти эту разницу в событии изменения текста для внутренних целей
3. Сравните текст с вашей моделью. Если это отличается, то это был пользовательский ввод
4. Или возьмите другое событие, например KeyDown
5. Это невозможно выяснить в обработчике
TextChanged
событий. Сделайте все, что вы хотите сделать, прежде чем устанавливатьText
свойство программно?
Ответ №1:
Вы можете установить логическую переменную с именем IsUserInput, после того как система ввода-вывода отправит данные в текстовое поле, вам нужно установить значение IsUserInput в значение false. В KeyDown
случае текстового поля переменная может быть установлена в значение true. Наконец, вы можете использовать эту переменную для определения ввода текста в textChanged
событии.
Пожалуйста, обратитесь к следующему коду.
public Boolean IsUserInput;
private void Button_Click(object sender, RoutedEventArgs e)
{
IsUserInput = false;
myTextBox.Text = "hellohello";
}
private void myTextBox_TextChanged(object sender, TextChangedEventArgs e)
{
if (IsUserInput)
{
//write data to I/O sytem
}
}
private void myTextBox_KeyDown(object sender, KeyRoutedEventArgs e)
{
IsUserInput = true;
}