基于 ViewModel 的 MVVM 变更模型验证规则
本文关键字:模型 验证 规则 ViewModel MVVM 基于 | 更新日期: 2023-09-27 18:33:54
我有一个ModelA
使用ModelA
内部定义的验证规则实现IDataErrorInfo
。我的ViewModelA
包含 ObservableCollection<ModelA>
类型的ListA
,并且是绑定到我的ViewA
的数据,用于用户与列表的交互(添加、删除、编辑等(。
现在我想要一个ViewModelA
固有的ViewModelB
,并且绑定到同一视图的数据ViewA
,但我希望ListA
中的ModelA
使用不同的验证规则。
我想我可以通过以下方式实现它:
-
答:创建一个派生自
ModelA
的新ModelB
并覆盖那里的验证功能;创建类型的新ListB
ObservableCollection<ModelB>
在我的ViewModelB
.但是我找不到在此新列表中重用ViewA
的方法,我需要创建一个新ViewB
显示它。 -
B:使用全局标志指示视图模型,并更改根据该标志的验证规则。这样我就可以使用相同的
ViewA
与我的ViewModelB
中的相同ListA
链接.
但我真的在寻找这样的东西:
- 创建派生自
ModelA
的新ModelB
并覆盖那里的验证功能;以某种方式重新定义我的ListA
ObservableCollection<ModelB>
ViewModelB
,然后重用ViewA
。
有什么办法可以做到这一点吗?
您可以创建一个抽象泛型类,并从中派生 ModelA 和 ModelB。
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(); }
}
}
如何创建某种接口
interface IModelValidiationService<TModel>
{
IDataErrorInfo Validate(TModel model);
}
或类似的东西?然后,您将ValidiationServiceA
注入ViewModelA
并将ValidiationServiceB
注入ViewModelB
。