【问题标题】:Is this a crazy way to handle multi Validation types with IDataError and WPF?这是用 IDataError 和 WPF 处理多种验证类型的疯狂方式吗?
【发布时间】:2010-09-13 06:35:21
【问题描述】:

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

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

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

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

请你的想法..

【问题讨论】:

    标签: wpf validation xaml styles


    【解决方案1】:

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

    【讨论】:

    • 我认为无法从错误模板访问额外的属性。 ErrorTemplate 的 DataContext 是 Validation.Errors 集合。
    【解决方案2】:

    如果您对有点清晰的(未经测试的)方法感到满意,那么您可以执行以下操作: 抛出异常,而不是使用 IDataErrorInfo 接口返回字符串。在您的 ErrorTemplate 中,您可以访问 ValidationErrors(和 ValidationError.Exception 属性)。

    然后,您将异常上的 DataTrigger 与转换器结合使用,该转换器检查正确的异常类型并返回真或假。完成这项工作就足够了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-18
      • 2011-02-17
      • 1970-01-01
      • 2013-02-04
      • 2013-02-12
      • 2013-11-24
      • 2012-08-29
      • 1970-01-01
      相关资源
      最近更新 更多