Textbox.TextChanged запускается при загрузке страницы.Как мне это предотвратить? - PullRequest
2 голосов
/ 02 ноября 2011

У меня проблемы с событием textbox.textchanged.мои текстовые поля привязаны к данным, и когда страница загружается, запускается событие с измененным текстом.Как я могу предотвратить это и запускать только тогда, когда пользователь вносит какие-либо изменения?

Ответы [ 4 ]

8 голосов
/ 02 ноября 2011

Внутри текстовых обработчиков событий вы можете проверить, загружено ли окно (или пользовательский контроль, или что-то еще):

if (this.IsLoaded)
{
   //your logic here
}

Таким образом, вы можете пропустить первый запуск событий TextChanged, когда окно еще не загружено.

2 голосов
/ 02 ноября 2011

Проблема в том, что всякий раз, когда текст установлен, TextChanged срабатывает. Именно так работает WPF. Вы можете «исправить» это, установив события в codebehind, подписавшись на событие Loaded окна / Usercontrol. Событие Loaded срабатывает после того, как каждый дочерний элемент и его дочерние элементы закончили загрузку и готовы к отображению.

<UserControl ---- Loaded="UserControl_Loaded">    
-
public void UserControl_Loaded(object sender, RoutedEventArgs e)
{
    _txtBox.TextChanged += txt_changed;
}

public void txt_changed(object sender, RoutedEventArgs e)
{
   (...)
}
1 голос
/ 02 ноября 2011

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

Вы можете использовать UpdateSourceTrigger"Явный" здесь.

<TextBox Text={Binding MyData, UpdateSourceTrigger=Explicit}/>

Таким образом, ваши изменения распространяются только путем явного вызова UpdateSource для ваших привязок, когда ваш пользователь нажимает кнопку сохранения.

Если вы используете MVVM, вы также можете реализовать ту же логику в коде для ViewModels.

0 голосов
/ 12 марта 2014

У меня была такая же проблема, и в итоге я нашел решение.

В окне я добавил переменную для загруженного окна и установил в конце события Window_Loaded значение true.

В событиях TextChanged проверьте, является ли ваша переменная истинной.

...