加载页面时Textbox.TextChanged触发。我该如何预防呢?

时间:2011-11-02 06:27:35

标签: wpf data-binding textbox textchanged

我遇到了textbox.textchanged事件的问题。我的文本框是数据绑定的,当加载页面时,textchanged事件触发器。如何防止它发生并且仅在用户进行任何类型的更改时触发?

4 个答案:

答案 0 :(得分:8)

在textchanged事件处理程序中,您可以验证是否加载了窗口(或usercontrol或其他):

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

这样,当窗口尚未加载时,您可以跳过第一次触发TextChanged事件。

答案 1 :(得分:2)

问题在于,无论何时设置文本,TextChanged都会触发。这就是WPF的工作方式。您可以通过订阅Window / Usercontrol的Loaded事件,通过在代码隐藏中设置事件来“修复”此问题。每个孩子及其孩子完成装载后,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)
{
   (...)
}

答案 2 :(得分:1)

好吧,从您的评论中我收集到您希望用户进行更改,这些更改仅在明确保存或关闭表单时传播到基础数据。

您可以在此使用UpdateSourceTrigger“明确”。

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

因此,只有当用户点击“保存”按钮时,才会通过在绑定上显式调用UpdateSource来传播更改。

如果使用MVVM,您还可以在ViewModels中以代码方式实现相同的逻辑。

答案 3 :(得分:0)

我遇到了同样的问题并最终解决了问题。

在窗口中我为窗口加载了一个变量,我在Window_Loaded事件的末尾将其设置为true。

在TextChanged事件中检查您的变量是否为真。