WPF在使用Binding时,经常需要进行数据校验,如果校验失败需要捕获失败的原因,并加以展示,本文主要介绍数据校验异常并捕获的三种方式。
public int Value
{get { return (int)GetValue(ValueProperty); }set { SetValue(ValueProperty, value); }
}
//第5个参数为验证回调函数
public static readonly DependencyProperty ValueProperty =DependencyProperty.Register("Value", typeof(int), typeof(MainWindow), new PropertyMetadata(0), new ValidateValueCallback(OnValueValidation));private static bool OnValueValidation(object value)
{if (value.ToString() == "123")return false;return true;
}
Validation.Errors静态函数,获得一个集合,一般都是一条数据。

如果不是依赖属性,可以利用引发异常的方式来让XAML来捕获。
类中的某个普通属性
public class MyData
{private string _value = "200";public string Value{get { return _value; }set{_value = value;if (value == "123")throw new System.Exception("报错了~~~[Exception]");}}
}
在XAML中增加DataContext
此时在文本框中输入123,会直接引发异常
点击继续调试,会出现如下效果,调试状态下会比较难受,但是在程序打包运行后,效果和之前一样,但是不推荐这样,比较消耗资源。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zG4PJmPg-1673592883266)(Binding数据校验的三种方式.assets/image-20230113144430817.png)]](/uploadfile/202405/7beacc57bdbfcb9.png)
可以自定一个类,继承自ValidationRule,类中包括验证规则
public class ValueValidtionRule : ValidationRule
{public override ValidationResult Validate(object value, CultureInfo cultureInfo){if (value.ToString() == "123")//报错return new ValidationResult(false, "报错了~~~~[ValueValidtionRule]");return new ValidationResult(true, "");}
}
