【问题标题】:What is IDataErrorInfo and how does it work with WPF?什么是 IDataErrorInfo 以及它如何与 WPF 一起使用?
【发布时间】:2010-12-25 10:10:03
【问题描述】:

在 WPF 中处理一些自定义验证器时,我的一位同事向我指出了 IDataErrorInfo。我在 XAML 中有一个示例视图,其中包含一个文本框和一个按钮。根据文本框中的值,我希望启用或禁用该按钮。我的同事建议在我的视图演示者中扩展 IDataErrorInfo 并为“Item”和“Error”属性编写自定义逻辑将解决我的问题。在我将它合并到我的代码中之前,我想我应该了解 IDataError 信息是如何工作的,以及实现这个提供必要钩子来触发自定义验证逻辑的接口是什么?对这个概念的一些帮助将非常有帮助!

【问题讨论】:

    标签: .net wpf validation events error-handling


    【解决方案1】:

    IDataErrorInfo 是一个类可以实现的接口,用于通知订阅者特定属性的错误信息以及类级别的错误。

    如果您为用作 DataContext 的类(即:MVVM 中的 ViewModel)实现此功能,您可以将控件的 UpdatesOnValidationError 设置为 true,并设置自定义模板以在出现错误时以不同方式显示项目。 WPF 为您处理管道。

    这是short tutorial showing the entire process

    【讨论】:

    • 感谢您的快速回复。我实际上想知道所有接线在幕后是如何工作的。作为 WPF 世界的新手,我想知道运行时究竟如何知道扩展 IDataErrorInfo 将触发验证。您的解释很有帮助,但我仍然对事物如何连接在一起感到有些困惑。
    • 基本上,如果您输入 UpdatesOnValidationError,则只要属性更改(WPF 通过 INotifyPropertyChanged 或依赖属性机制知道),它就会检查该属性的 IDataError 信息。如果有错误,它会交换模板。
    • 谢谢里德。事情越来越清楚了。在我的 XAML 中,对于我的 Textbox.Text,我正在考虑插入以下内容: 这里有什么资格作为 UpdatesOValidationError? ValidatesOnTargetUpdated="True",是否调用了文本的Error属性?
    • 是的 - 基本上,这会导致它触发。如果您想在实践中观看,只需让您的 IDataErrorInfo 执行 Debug.Print,然后在输出窗口中观看。你会看到它是如何燃烧的。 Alternativley,设置一个断点,并检查调用堆栈(虽然这用途有限,因为您将很快进入 WPF 类)...
    • 让你知道链接已经死了@ReedCopsey
    【解决方案2】:

    您可能对 WPF Application Framework (WAF)BookLibrary 示例应用程序感兴趣。它展示了如何在 WPF 中使用验证,以及在存在验证错误时如何控制“保存”按钮。

    【讨论】:

      【解决方案3】:

      如前所述,IDataErrorInfo 接口为数据绑定的 ViewModel 属性提供验证。您可以实现自定义验证规则或利用 System.ComponentModel.DataAnnotations 中可用的验证属性。

      我发现许多关于这个主题的教程都带有额外的“绒毛”,它们会让刚开始使用 WPF 的人难以掌握这个概念。我在 refactorthis.net 上写了一个直截了当的教程,名为 WPF Validation tutorial for the rest of us. Learn to use IDataErrorInfo to automatically validate your views.

      【讨论】:

        猜你喜欢
        • 2010-12-09
        • 2023-04-07
        • 2016-09-10
        • 1970-01-01
        • 2011-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多