说明:本文出处: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)
对验证提示,可以进行样式的设置。
前台添加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事件


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引用,并且将数据源的类定义修成为如下形式:


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 }