• WPF-Binding对数据的检验


    设置Binding的ValidationRules属性对Binding进行检验

    <StackPanel>
    <TextBox x:Name="txtAge" FontSize="30" Foreground="Red"></TextBox>
    <TextBlock x:Name="errorSummary" FontSize="30" Foreground="Red"></TextBlock>
    </StackPanel>

    后台代码

    public partial class MainWindow : Window
    {
    public MainWindow()
    {
    InitializeComponent();
    Person p = new Person { Age = 20, Name = "Tom" };
    Binding binding = new Binding("Age") { Source = p };
    binding.NotifyOnValidationError = true;
    binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
    RangeValidationRule rv = new RangeValidationRule();
    binding.ValidationRules.Add(rv);
    this.txtAge.SetBinding(TextBox.TextProperty, binding);
    this.txtAge.AddHandler(Validation.ErrorEvent, new RoutedEventHandler(this.ValidationError));
    }
    void ValidationError(object sender, RoutedEventArgs e)
    {
    if (Validation.GetErrors(this.txtAge).Count > 0)
    {
    this.txtAge.ToolTip = Validation.GetErrors(this.txtAge)[0].ErrorContent.ToString();
    this.errorSummary.Text = Validation.GetErrors(this.txtAge)[0].ErrorContent.ToString();
    // You can do everything here when validation error occurs
    }
    }
    }
    }

    同样,我们在XAML里也可以设置验证

    <StackPanel>
    <TextBox x:Name="txtAge" FontSize="30" Foreground="Red" Validation.Error="txtAge_Error">
    <Binding NotifyOnValidationError="True" Path="Age" UpdateSourceTrigger="PropertyChanged">
    <Binding.ValidationRules>
    <local:RangeValidationRule></local:RangeValidationRule>
    </Binding.ValidationRules>
    </Binding>
    </TextBox>
    <TextBlock x:Name="errorSummary" FontSize="30" Foreground="Red"></TextBlock>
    </StackPanel>

    后台代码:

    public partial class MainWindow : Window
    {
    public MainWindow()
    {
    InitializeComponent();
    Person p = new Person { Age = 20, Name = "Tom" };
    this.DataContext = p;
    }
    private void txtAge_Error(object sender, ValidationErrorEventArgs e)
    {
    if (Validation.GetErrors(this.txtAge).Count > 0)
    {
    this.txtAge.ToolTip = Validation.GetErrors(this.txtAge)[0].ErrorContent.ToString();
    this.errorSummary.Text = Validation.GetErrors(this.txtAge)[0].ErrorContent.ToString();
    // You can do everything here when validation error occurs
    }
    }
    }

  • 相关阅读:
    cinder-volume报错vmdk2 is reporting problems, not sending heartbeat. Service will appear "down".
    Linux下截取指定时间段日志并输出到指定文件
    使用diff或者vimdiff比较远程文件(夹)与本地文件夹
    OpenStack视图
    awk 计算某一列的和
    opencontrail—VXLAN模式下数据包的传输过程
    shell-计算虚拟机创建时间
    gnocchi resource批量删除
    openflow控制器和交换机之间的消息
    openflow packet_out和packet_in分析
  • 原文地址:https://www.cnblogs.com/sjqq/p/6626071.html
Copyright © 2020-2023  润新知