如果任何控件已更改 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);
}

我仍然混淆了将INotifyPropertyChangedValidationRule与使用MessageBox显示我想要的错误相结合。我仍然是使用这种功能的新手。

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

有什么帮助吗?..

如果任何控件已更改 WPF,则引发事件

可以在承载文本框的容器上注册处理程序。喜欢这个:

<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!");
        }
    }