【问题标题】:How to Use Model Validation Rules in WPF ViewModel如何在 WPF ViewModel 中使用模型验证规则
【发布时间】:2013-04-25 02:51:17
【问题描述】:

我正在使用带有 MVVM 模式的 WPF,并且刚刚开始一个非常大的项目。

为了将关注点分开,我想将所有验证规则放入我的数据模型中。

但是当我回顾如何进行 WPF 验证时,我能找到的所有示例都显示了如何使用持有验证规则的 ViewModel 进行验证。其中一些示例显示了对 WPF 的一些真正深刻的理解,并且非常酷。

在这个特定的应用程序中,我在编辑的 ViewModel 和模型之间有一个 1:1 的映射,所以我可以把它放在 ViewModel 中。但就是感觉不对。

【问题讨论】:

    标签: c# wpf validation mvvm


    【解决方案1】:

    使用IDataErrorInfo(如果您正在使用)的验证将发生在绑定到视图上的对象上。

    如果你有

    <TextBox Text="{Binding Name}" />
    

    这将在 ViewModel 上。但是,如果您将模型公开为视图模型上的属性,则验证将在您的数据模型上进行。

    <TextBox Text="{Binding Model.Name}" />
    

    使用第一个选项,您可以绑定到视图模型属性并路由到包含实际验证的数据模型,然后只需在视图模型上实现 IDataErrorInfo 并将验证路由到模型

    视图模型:

    public string this[string propname]
    {
         get { return _model[propname]; }
    }
    

    仅当您实际在模型上设置所需的属性以使验证工作时,这才有用

    视图模型:

    public string SomeProperty
    {
         get { reutrn _model.SomeProperty; }
         set {
               _model.OtherProperty = value; 
               RaisePropertyChanged("SomeProperty");
             }
    }
    

    但是我更喜欢第二个绑定选项,因为它的问题是它不是很干燥,所以我几乎总是将 DataModel 公开为视图模型上的属性(因为它负责数据)并保留ViewModel 管理视图的模型,这更多的是关于 UI 如何与数据交互。

    在非常复杂的场景中,最好将验证与模型和视图模型分开,让视图模型和数据模型都使用它。

    【讨论】:

      猜你喜欢
      • 2018-04-18
      • 2018-02-22
      • 1970-01-01
      • 2021-05-13
      • 2017-12-01
      • 2020-05-15
      • 1970-01-01
      • 2019-12-14
      • 2014-08-22
      相关资源
      最近更新 更多