Silverlight数据验证

说明:本文出处: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 } 

 

你可能感兴趣的:(silverlight)