1

我正在将我现有的应用程序之一转换为 MVVM 模式以改进其结构,但我对什么是进行数据验证的最佳方式感到有些困惑。

目前,该应用程序使用数据绑定来链接 UI 和代码,并使用一些验证规则和值转换器,这些规则和值转换器可以在相似的值上重复使用(每个用于日期等)。

在阅读 MVVM 时,我遇到了 IDataErrorInfo,我觉得它很有吸引力,因为它会将验证排除在视图之外,从而在设置绑定等时略微减少重复代码,并允许更具体的错误消息。

另一方面,如果验证失败,ValidationRules 会阻止绑定数据的传输,这是我需要的,因为我只希望模型值更改一个新的有效值。

我主要担心的是,如果我在视图模型中限制太多,这会使视图中的事情变得困难 - 在一般情况下将事物限制在舒适的水平,然后补救需要更多灵活性的特定情况是否是个好主意风景?

所以我的主要问题是,将验证和转换放在视图模型的属性中还是坚持我的验证规则和值转换器(或两者之间的某种妥协)会更好吗?

4

2 回答 2

2

我在视图模型中实现所有验证,使用IDataErrorInfo,并让视图模型根据属性是否有效来决定是否应该将属性更改传递给模型。所以一个典型的二传手看起来像:

public string Value
{
   set
   {
      if (value == _Value)
      {
         return;
      }
      _Value = value;
      Validate("Value");
      if (Error["Value"] == null)
      {
         Model.Value = value;
      }
      OnPropertyChanged("Value");
   }
}

我从来没有在视图中实现过验证或值转换。这简直是​​自找麻烦。

于 2010-11-24T18:50:39.893 回答
1

我会使用一个组合。

我在我的实体中使用 Idataerrorinfo(验证不在视图模型中)作为核心可重用业务规则。我的实体也可以通过这种方式验证自己。

然后,我将视图 ValidationRules 用于绑定错误不会影响到我的实体的地方,例如当字符串用作整数文本框中的输入时。

于 2010-11-24T11:52:18.847 回答