我想在我的WPF应用程序中进行make验证。我想要使用的方法是,如果我的控件的任何值已经更改,我想采取自定义操作。
我怎么能这样做,假设我有这样的控制
<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值来验证其他文本框。
有什么帮助?..
答案 0 :(得分:1)
您可以在托管TextBox的Container上注册处理程序。像这样:
<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>
这样,所有TextBox都将使用相同的处理程序,您可以查询e.Source以找出哪个TextBox触发了该事件。
答案 1 :(得分:0)
对于mvvm中的验证,您可以使用IDataErrorInfo。网上都有例子。
如果你真的想在视图模型中的属性发生变化时做一些特殊操作,你可以简单地订阅你自己的viewmodel PropertyChanged事件并处理你的东西
答案 2 :(得分:0)
您可能希望阅读有关BindingGroups和验证的this block post(以及此related blog post)。它们向您展示了如何使用自定义验证规则一次验证多个控件。
答案 3 :(得分:-1)
<TextBox HorizontalAlignment="Left" LostFocus="OnLostFocus"/>
这是一个简单的方法。使用WPF中的LostFocus事件进行验证
private void TextBox_LostFocus_1(object sender, RoutedEventArgs e) {
var thisTextBox = (TextBox)sender;
if (thisTextBox.Text == "") {
MessageBox.Show("Validate!");
}
}