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

标签 c# wpf validation

我需要验证绑定(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/

相关文章:

c# - 使用反射和 PropertyInfo 无法识别我的枚举

c# - C# 中的 "Class"和 "Private Class"声明有什么区别?

c# - 使用linq从基类列表中获取相同类型的继承类项

C# 泛型和集合

php - 验证表单输入客户端 (JS) 与服务器端

c# - 'MyUserControls.ComboBox 1' does not contain definition for ' ItemsSource'

c# - WPF/Silverlight 风格分析器

wpf - 为什么 WPF 控件没有 Tag 属性?

php - 我真的需要正则表达式来检查输入字段是否为整数吗?

validation - VBA Excel代码:cannot give named range to formula1 in validation