我遇到了 textbox.textchanged 事件的问题。我的文本框是数据绑定的,当页面加载时,会触发 textchanged 事件。如何防止它发生并且仅在用户进行任何类型的更改时触发?
问问题
6653 次
4 回答
11
在 textchanged 事件处理程序中,您可以验证是否加载了窗口(或用户控件或其他):
if (this.IsLoaded)
{
//your logic here
}
这样,当窗口尚未加载时,您可以跳过第一次触发 TextChanged 事件。
于 2011-11-02T06:47:21.637 回答
3
问题是,只要设置了文本,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)
{
(...)
}
于 2011-11-02T08:23:32.137 回答
1
好吧,从您的评论中,我了解到您希望用户进行更改,这些更改仅在他明确保存或关闭表单时传播到基础数据。
您可以在此处使用UpdateSourceTrigger “Explicit”。
<TextBox Text={Binding MyData, UpdateSourceTrigger=Explicit}/>
因此,只有在用户点击保存按钮时,才通过在绑定上显式调用 UpdateSource 来传播您的更改。
如果你使用 MVVM,你也可以在 ViewModels 中实现相同的逻辑代码。
于 2011-11-02T06:44:19.083 回答
1
我遇到了同样的问题,最终得到了解决。
在窗口上,我为加载的窗口添加了一个变量,并在 Window_Loaded 事件结束时将其设置为 true。
在 TextChanged 事件中检查您的变量是否为真。
于 2014-03-11T22:33:24.153 回答