我需要验证绑定(bind)到 TextBox 的字段,它是 DataContext 实现 IDataErrorInfo
<TextBox x:Name="txt" Text="{Binding PatientID, ValidatesOnDataErrors=True}" />
我需要在 TextBox 上显示错误,并且为了简单起见,在我的表单中 另外 2 个文本 block :
<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 上留下验证 使用 Validation.ValidationAdornerSiteFor 在 TextBox 上标记它仅应用于 UIElement 其次使用 Validation.ValidationAdornerSiteFor 只留下最后一个使用它标记为验证错误的 UIElement (TXT 2)
我可以使用什么机制来显示在 3 个不同控件的一个字段上引发的验证错误,包括实际绑定(bind)到该字段的控件(即 TextBox),
显示验证错误是指控件上的红色边框(或任何验证模板)。
最佳答案
简单的方法(但是,不是通用的)是创建一个行为,将处理程序添加到 OnDataError。
该行为将包含 5 个 DP: 3 x FrameWorkElement(用于文本框) 1 个绑定(bind)到 ViewModel HasError 属性(新属性)的 bool 1 个绑定(bind)到 ViewModel ErrorDescription 属性的字符串(新属性)
现在,您可以创建一个 DataTemplate,只要 HasError 属性更改为 True,它就会显示带有红色边框和工具提示的 TextBox。
同样,这是一种简单的非通用方法。
关于c# - 验证,在多个控件上显示数据错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21367953/