【问题标题】:How to implement generic control validation?如何实现通用控件验证?
【发布时间】:2013-01-30 19:10:37
【问题描述】:

我最近一直在努力养成在我正在从事的项目中使用 MVVM 设计模式的习惯,目的是解耦应用程序中的各种模块并使其适合单元测试。

我已经转向输入验证。我正在我的 ViewModel 中实现 IDataErrorInfo...这似乎对 TextBox 很有效。

我目前正在尝试研究如何在绑定到自定义对象的 ObservableCollection 的 ListBox 控件上实现 IDataErrorInfo。问题是每一行(ListBoxItem)都直接更新模型,所以我在 ViewModel 中的 IDataErrorInfo 实现被绕过了。所以我看到它的方式可以做两件事之一 -

1) 创建一个辅助 ViewModel(代表 ListBoxItems),我用它来填充 Observable Collection 并在其上实现 IDataErrorInfo。

2) 在我的模型上实现 IDataErrorInfo。但是,由于 ViewModel 主要用于中继来自我的模型的引用,因此我可能会考虑将我的所有 IDataErrorInfo 实现移动到我的模型类以保持一致性......

你会怎么做?

另外...关于创建可重用验证方法的任何建议,我可以轻松地将其应用于任何类型的控件?

干杯

【问题讨论】:

    标签: c# wpf mvvm idataerrorinfo


    【解决方案1】:

    你会怎么做?

    当然,第一个选项 - 为列表项创建辅助视图模型。您不应在模型中实现 IDataErrorInfo,因为这是特定于 UI 的功能。

    可重用的验证方法,我可以轻松地应用于任何类型的控件

    您误解了 MVVM。 IDataErrorInfo 用于视图模型验证,而不是 控件 验证。

    【讨论】:

    • 可能是我的沟通技巧失败...哈哈。当我问及可重复使用的验证方法时,我指的是整个设置。所以,我可以在我的 ViewModel 中实现 IDataErrorInfo,但我也有一个自定义模板,用于设置 Validation.ErrorTemplate 的每个控件。似乎我必须在我的 xaml 顶部添加大量代码以进行验证 - 确定我可以将它放在资源字典中,但这是最优的吗?我也知道有不同的机制来验证数据 ValidationRules,甚至是 ValueConverters...所以正在寻求一些建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-21
    • 2021-08-21
    相关资源
    最近更新 更多