这是使用IDataError和WPF处理多种验证类型的疯狂方法吗?

时间:2020-03-06 14:45:07  来源:igfitidea点击:

我们在控件中使用标准方法来报告损坏的BO规则。这是通过我们的BO中的IDataError接口完成的,在XAML中,控件绑定到BOs属性等。此方法可以正常工作。但是,我们需要根据无效错误的类型(或者类别,如果我们喜欢)在UI中显示2种视觉效果。如果是必填字段,则显示CueBanner(水印),但对于其他类型,我们更改控件寄宿生的颜色。在这两种情况下,我们都将设置错误消息的工具类型。

IDataError的问题在于它不支持区分错误类型的方法/属性。

我唯一的方法是检查错误文本,必填字段文本必须包含必需的关键字。以下方法感觉不对,但是这是我可以确定错误类型然后进行相应处理的唯一方法。所有必填字段规则都必须将其作为错误文本必填字段的一部分。
为了使所有这些工作正常,我创建了一个名为ErrorMessage的自定义依赖项属性。在我的ResourceDictionary中,我有一个Style.Trigger用于Validation.HasError。在这里,我将依赖项属性值设置为ErrorContent。现在,当我的依赖项属性值更改时,我可以检查文本并将Validation.SetErrorTemplate(myControl,newErrorTemplate)设置为适合错误类型的模板。我必须将一些事件(例如丢失事件)连接到控件,并集中精力管理删除或者添加cueBanner模板,但整个过程都可以工作。我只是不确定自己是否是执行此操作的最佳方法。

PS。当我设置ErrorTemplate im在代码中执行此操作时,即构建并添加了它。有没有一种方法可以将Validation.SetErrorTemplate指向静态资源,同时要记住我需要在至少两种类型之间切换?

请你的想法..

解决方案

是否有可能派生一个接口IDataError,该接口添加一个额外的属性,该属性是错误类型的枚举。然后,我们可以尝试对其进行约束。