无废话WPF系列10: Binding对数据的检验

本文介绍如何在WPF中使用数据绑定验证功能确保输入的有效性。通过设置Binding的ValidationRules属性,结合XAML和C#代码,实现对TextBox中年龄输入的范围验证,并在发生验证错误时显示提示信息。

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

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

 

后台代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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();
1
2
3
4
5
6
                 // You can do everything here when validation error occurs
             }
         }
         
     }
}

 

image

 

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

1
2
3
4
5
6
7
8
9
10
< 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 >

 

后台代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
             }
         }       
}
本文转自敏捷的水博客园博客,原文链接http://www.cnblogs.com/cnblogsfans/archive/2011/02/19/1958646.html如需转载请自行联系原作者

王德水
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值