验证,在多个控件上显示数据错误

时间:2014-01-26 19:14:13

标签: c# wpf validation

我需要验证绑定到TextBox的字段,它的DataContext实现 IDataErrorInfo

  <TextBox x:Name="txt" Text="{Binding PatientID, ValidatesOnDataErrors=True}" />

我需要在 TextBox 上显示错误,并且为了简单起见,我的表单中还有 2个更多文本块

  <TextBox x:Name="txt" Text="{Binding Name, ValidatesOnDataErrors=True}" />
  <TextBlock Text="TXT 1" Validation.ValidationAdornerSiteFor="{Binding ElementName=txt}" />
  <TextBlock Text="TXT 2" Validation.ValidationAdornerSiteFor="{Binding ElementName=txt}" />

这里的问题是使用ValidationAdornerSiteFor不会在TextBox上留下验证 在TextBox上标记它仅使用Validation.ValidationAdornerSiteFor应用于UIElement 其次使用Validation.ValidationAdornerSiteFor只留下最后一个使用它标记验证错误的UIElement(TXT 2)

我可以使用什么机制来显示在3个不同控件上的一个字段上引发的验证错误,包括实际绑定到字段的那个(即TextBox),

通过显示验证错误,我的意思是控件上的红色边框(或任何验证模板)。

1 个答案:

答案 0 :(得分:1)

简单的方法(但不是通用的)将创建一个向OnDataError添加处理程序的行为。

该行为将包含5个DP: 3 x FrameWorkElement(用于文本框) 1 bool绑定到ViewModel HasError属性(新属性) 1个字符串,它绑定到ViewModel ErrorDescription属性(新属性)

现在,您可以创建一个DataTemplate,当HasError属性更改为True时,它会向文本框显示红色边框和工具提示。

同样,这是一种简单的非通用方式。