2

我想在我的 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);
}

我仍然对使用 MessageBox 组合INotifyPropertyChangedValidationRule显示我想要的错误感到困惑。我仍然是使用这种功能的新手。

我已经阅读了很多关于INotifyPropertyChangedor的文章,ValidationRule但我仍然不知道如何像我之前所说的那样获得自定义操作。并且自定义验证可以使用另一个 textbpx 值来验证另一个文本框。

有什么帮助吗?...

4

4 回答 4

1

您可以在托管您的 TextBox 的容器上注册处理程序。像这样:

<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 触发了事件。

于 2013-06-14T09:09:50.333 回答
0

您可能想阅读这篇关于 BindingGroups 和验证的文章(以及这篇相关的博客文章)。它们向您展示了如何使用自定义验证规则一次验证多个控件。

于 2013-06-14T18:22:20.297 回答
0

对于 mvvm 中的验证,您可以使用 IDataErrorInfo。整个网络都有例子。

如果您真的想在视图模型中的属性更改时执行一些特殊操作,您可以简单地订阅您自己的视图模型 PropertyChanged 事件并处理您的东西

于 2013-06-14T08:54:45.247 回答
-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!");
        }
    }
于 2013-06-14T08:31:00.670 回答