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

时间:2008-09-25 21:37:55

标签: wpf validation xaml styles

我们正在使用控件的标准方法来报告损坏的BO规则。这是通过我们BO中的接口IDataError和XAML中的控件绑定到BO的属性等来完成的。这种方法可以正常工作。但我们需要在UI中显示两种类型的视觉效果,具体取决于失效错误的类型(或类别,如果您愿意)。如果它是必填字段,那么我们会显示一个CueBanner(水印),但对于其他类型,我们会更改控件边框的颜色。在这两种情况下,我们都设置了错误消息的工具类型。

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

我能做到的唯一方法是检查错误文本,必填字段文本必须包含关键字“required”。以下方法感觉不对,但这是我可以确定错误类型然后相应处理它的唯一方法。所有必填字段规则必须作为错误文本“必填字段”的一部分。 为了使这一切工作,我创建了一个名为ErrorMessage的自定义依赖项属性。在我的ResourceDictionary中,我有一个Validation.HasError的Style.Trigger。在那里我将我的依赖属性值设置为ErrorContent。现在,当我的依赖项属性值发生更改时,我可以检查文本并将Validation.SetErrorTemplate(myControl,newErrorTemplate)设置为模板以适应错误类型。我必须将一些事件连接到控件,例如丢失并获得焦点以管理删除或添加cueBanner模板,但整个过程将起作用。只是我不确定这是最好的方法。

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

请你的想法..

2 个答案:

答案 0 :(得分:3)

是否可以派生一个接口IDataError,它添加了一个额外的属性,它是错误类型的枚举。然后你可以尝试绑定它。

答案 1 :(得分:0)

如果您对某种(未经测试的)方法有所了解,那么您可以执行以下操作: 抛出异常而不是返回带有IDataErrorInfo接口的字符串。在ErrorTemplate中,您可以访问ValidationErrors(以及ValidationError.Exception属性)。

然后,在Exception上使用DataTrigger并结合转换器,检查正确的Exception-Type并返回true或false。这应该足以完成这项工作。