Silverlight数据验证

本文介绍在WPF中如何实现数据验证,包括通过TextBox的TextChanged事件实时验证内容长度、使用样式设置验证提示,以及利用数据注解进行验证。文章提供代码示例,展示如何创建自定义验证逻辑。

说明:本文出处:http://www.cnblogs.com/sydeveloper/archive/2012/09/03/2668073.html

前台:

<TextBox Name="tb1" Text="{Binding Name,Mode=TwoWay,ValidatesOnExceptions=True}" Height="100" Width="100"/>

后台:

 

Person p = new Person();

public MainPage()
{
    InitializeComponent();
    p.Name = "123";
    tb1.DataContext = p;
}
public class Person : INotifyPropertyChanged
{
    private string name;
    public string Name
    {
        get { return name; }
        set
        {
            if (value.Length > 3)
            {
                throw new Exception("不能超过三个字!");
            }
            name = value;
            NotifyChange("Name");
        }
    }
    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyChange(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

  

2.验证TextBox内容不超过指定长度,不失去焦点验证。只需要在上例的基础上为TextBox添加TextChanged事件,并且在事件里通知数据源即可。

private void tb1_TextChanged(object sender, TextChangedEventArgs e)

{     System.Windows.Data.BindingExpression expresson = (sender as TextBox).GetBindingExpression(TextBox.TextProperty);     expresson.UpdateSource(); }

对验证提示,可以进行样式的设置。

前台添加NotifyOnValidationError属性和BindingValidationError事件

<TextBox Name="tb1" Text="{Binding Name,Mode=TwoWay,ValidatesOnExceptions=True,NotifyOnValidationError=True}" Height="100" Width="100" TextChanged="tb1_TextChanged" BindingValidationError="tb1_BindingValidationError"/>

后台实现BindingValidationError事件

 

View Code
 1 private void tb1_BindingValidationError(object sender, ValidationErrorEventArgs e)
 2 {
 3     if (e.Action == ValidationErrorEventAction.Added)
 4     {
 5         (sender as TextBox).Background = new SolidColorBrush(Colors.Red);
 6 
 7     }
 8     else if (e.Action == ValidationErrorEventAction.Removed)
 9     {
10         (sender as TextBox).Background = new SolidColorBrush(Colors.White);
11     }
12 
13 } 

3.标注的方式验证。要添加System.ComponentModel.DataAnnotations.dll引用,并且将数据源的类定义修成为如下形式:

View Code
 1 public class Person : INotifyPropertyChanged
 2 {
 3     private string name;
 4     [StringLength(3, ErrorMessage = "不能超过3个字,这是标注的方式验证!")]
 5     public string Name
 6     {
 7         get { return name; }
 8         set
 9         {
10             Validator.ValidateProperty(value, new ValidationContext(this, null, null) { MemberName = "Name" });
11             name = value;
12             NotifyChange("Name");
13         }
14     }
15     public event PropertyChangedEventHandler PropertyChanged;
16     private void NotifyChange(string propertyName)
17     {
18         if (PropertyChanged != null)
19         {
20             PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
21         }
22     }
23 
24 } 

 

转载于:https://www.cnblogs.com/zxbzl/archive/2013/03/10/2952703.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值