我需要验证绑定到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),
通过显示验证错误,我的意思是控件上的红色边框(或任何验证模板)。
答案 0 :(得分:1)
简单的方法(但不是通用的)将创建一个向OnDataError添加处理程序的行为。
该行为将包含5个DP: 3 x FrameWorkElement(用于文本框) 1 bool绑定到ViewModel HasError属性(新属性) 1个字符串,它绑定到ViewModel ErrorDescription属性(新属性)
现在,您可以创建一个DataTemplate,当HasError属性更改为True时,它会向文本框显示红色边框和工具提示。
同样,这是一种简单的非通用方式。