如果任何控件已更改 WPF,则引发事件
本文关键字:事件 WPF 任何 控件 如果 | 更新日期: 2023-09-27 18:18:35
我想在我的 WPF 应用程序中进行验证。我想使用的方法是,如果我的控件的任何值已更改,我想采取自定义操作。
假设我有这样的控制权,我怎么能做到这一点
<TextBox x:Name="TextBox1" Text="{Binding Path=Box1,UpdateSourceTrigger=PropertyChanged}" />
<TextBox x:Name="TextBox2" Text="{Binding Path=Box2,UpdateSourceTrigger=PropertyChanged}" />
如果用户更改该控件之一的值,我想创建自定义操作,例如(对于我的想法(
private void Window_Controls_Property_Changed(object sender,RoutedEventArgs e){
if(((Control)sender)=="TextBox1")
MessageBox.Show("Show message here of validation some control","Attention",MessageBoxButton.OK);
}
我仍然混淆了将INotifyPropertyChanged
或ValidationRule
与使用MessageBox显示我想要的错误相结合。我仍然是使用这种功能的新手。
我已经阅读了许多关于INotifyPropertyChanged
或ValidationRule
的文章,但我仍然不知道如何像我之前所说的那样获得自定义操作。自定义验证可以使用另一个 textbpx 值来验证另一个文本框。
有什么帮助吗?..
可以在承载文本框的容器上注册处理程序。喜欢这个:
<StackPanel TextBox.LostFocus="TextBox_OnLostFocus">
<TextBox x:Name="TextBox1" Text="{Binding Path=Box1,UpdateSourceTrigger=PropertyChanged}" />
<TextBox x:Name="TextBox2" Text="{Binding Path=Box2,UpdateSourceTrigger=PropertyChanged}" />
</StackPanel>
这样,相同的处理程序将用于所有文本框,您可以查询e.Source以找出哪个文本框触发了事件。
对于 mvvm 中的验证,您可以使用 IDataErrorInfo。 网上到处都是这样的例子。
如果你真的想在视图模型中的属性发生变化时执行一些特殊操作,你可以简单地订阅你自己的视图模型 PropertyChanged 事件并处理你的东西
您可能想要阅读这篇关于绑定组和验证的块文章(以及这篇相关的博客文章(。 它们向您展示了如何使用自定义验证规则一次验证多个控件。
<TextBox HorizontalAlignment="Left" LostFocus="OnLostFocus"/>
这是一个简单的方法。使用 WPF 中的丢失焦点事件进行验证
private void TextBox_LostFocus_1(object sender, RoutedEventArgs e) {
var thisTextBox = (TextBox)sender;
if (thisTextBox.Text == "") {
MessageBox.Show("Validate!");
}
}