效果图,当放鼠标到文本框上会显示出错的提示。
1、在对文本框绑定属性Count,并在绑定属性时添加NotifyOnValidationError=True,ValidatesOnExceptions=True,当通知更新源时会触发验证,如果验证失败则会触发Validation.Error事件,此事件是隧道事件,可以写在上一层对象中
<Grid Validation.Error="Grid_Error"> <TextBox Name="txt" Text="{Binding Path=Count,UpdateSourceTrigger=PropertyChanged,NotifyOnValidationError=True,ValidatesOnExceptions=True}"/> </Grid>
2、验证过程放在属性的set中,如下MyValide,失败时抛出异常。
private int c; public int Count { get { return c; } set { MyValide(value); c = value; if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs("Count")); } } } public void MyValide(int v) { if(Regex.Match(v.ToString(),@"^d{6}$").Success==false) { throw new ArgumentException("请填写6个数字!"); } }
3、如果抛出异常则有Error事件处理,在文本框上的toolTip属性中显示提示信息。
private void Grid_Error(object sender, ValidationErrorEventArgs e) { if (Validation.GetErrors(txt).Count() > 0) { txt.ToolTip = Validation.GetErrors(txt)[0].ErrorContent.ToString(); } else txt.ToolTip = null; }