У меня проблемы с событием textbox.textchanged. мои текстовые поля привязаны к данным, и когда страница загружается, срабатывает событие textchanged. Как предотвратить это и срабатывать только тогда, когда пользователь вносит какие-либо изменения?
Textbox.TextChanged срабатывает при загрузке страницы. Как предотвратить это?
Ответы (4)
Внутри обработчиков событий с измененным текстом вы можете проверить, загружено ли окно (или пользовательский контроль, или что-то еще):
if (this.IsLoaded)
{
//your logic here
}
Таким образом, вы можете пропустить первое срабатывание событий TextChanged, когда окно еще не загружено.
<bag:InfoTextBox Name="EmailAddress" TextBoxInfo="Enter an E-Mail address" VerticalAlignment="Center" Style="{StaticResource BorderedTextBox}" Width="300" Text="{Binding Path=Email, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
- person will0809; 03.11.2011
Проблема в том, что всякий раз, когда устанавливается текст, срабатывает TextChanged. Именно так работает WPF. Вы можете «исправить» это, установив события в отделенном коде, подписавшись на событие Loaded элемента управления Window/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)
{
(...)
}
Что ж, из вашего комментария я понял, что вы хотите, чтобы пользователь вносил изменения, которые распространяются только на базовые данные, когда он явно сохраняет или закрывает форму.
Вы можете использовать UpdateSourceTrigger "явный " здесь.
<TextBox Text={Binding MyData, UpdateSourceTrigger=Explicit}/>
Таким образом, ваши изменения распространяются только путем явного вызова UpdateSource для ваших привязок, когда ваш пользователь нажимает кнопку сохранения.
Если вы используете MVVM, вы также можете реализовать ту же логику в ViewModels.
У меня была такая же проблема, и в итоге мне пришлось работать.
В окне я добавил переменную для загрузки окна и установил для нее значение true в конце события Window_Loaded.
В событиях TextChanged проверьте, является ли ваша переменная истинной.
someButton.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
но это не сработало. Я поместил это после InitializeComponent(). Я делаю это неправильно? - person will0809   schedule 02.11.2011