MVVM Change Model基于ViewModel的验证规则

时间:2014-12-10 14:52:44

标签: c# wpf validation mvvm polymorphism

我有一个ModelA实现IDataErrorInfo,其中ModelA定义了验证规则。我的ViewModelA包含ListA类型ObservableCollection<ModelA>,并且是绑定到ViewA的数据,用于用户与列表的互动(添加,删除,编辑等)。< / p>

现在我想要一个ViewModelB来自ViewModelA,而数据绑定到同一个视图ViewA,但我希望ModelA位于ListA使用不同的验证规则。

我想我可以通过以下方式实现它:

  • 答:创建一个从ModelB派生的新ModelA并覆盖。{ 验证功能在那里;创建一个新的ListB类型 我ObservableCollection<ModelB>中的ViewModelB。 但我无法找到一种方法来重用ViewA这个新列表,我需要创建一个 新ViewB以显示它。

  • B:使用全局标志来指示ViewModel,并更改 根据该标志的验证规则。这样我就可以使用相同的方法 ViewAListA中的ViewModelB相关联。{/ p>

但我真的在寻找类似的东西:

  • 创建一个从ModelB派生的新ModelA并覆盖。{ 验证功能在那里;以某种方式重新定义我的ListA ObservableCollection<ModelB>中的ViewModelB,然后重复使用ViewA

有没有办法做到这一点?

2 个答案:

答案 0 :(得分:0)

您可以创建一个抽象泛型类,并从itp>派生ModelS和Model

public abstract class Model<T> : IDataErrorInfo
  {
    public ObservableCollection<T> Items;

    public virtual string Error
    {
      get { throw new NotImplementedException(); }
    }

    public virtual string this[string columnName]
    {
      get { throw new NotImplementedException(); }
    }
  }

答案 1 :(得分:0)

如何创建某种界面

interface IModelValidiationService<TModel>
{
    IDataErrorInfo Validate(TModel model);
}

或类似的东西?然后,您可以ValidiationServiceAViewModelAValidiationServiceB注入ViewModelB

相关问题