我有一个ModelA
实现IDataErrorInfo
,其中ModelA
定义了验证规则。我的ViewModelA
包含ListA
类型ObservableCollection<ModelA>
,并且是绑定到ViewA
的数据,用于用户与列表的互动(添加,删除,编辑等)。< / p>
现在我想要一个ViewModelB
来自ViewModelA
,而数据绑定到同一个视图ViewA
,但我希望ModelA
位于ListA
使用不同的验证规则。
我想我可以通过以下方式实现它:
答:创建一个从ModelB
派生的新ModelA
并覆盖。{
验证功能在那里;创建一个新的ListB
类型
我ObservableCollection<ModelB>
中的ViewModelB
。
但我无法找到一种方法来重用ViewA
这个新列表,我需要创建一个
新ViewB
以显示它。
B:使用全局标志来指示ViewModel,并更改
根据该标志的验证规则。这样我就可以使用相同的方法
ViewA
与ListA
中的ViewModelB
相关联。{/ p>
但我真的在寻找类似的东西:
ModelB
派生的新ModelA
并覆盖。{
验证功能在那里;以某种方式重新定义我的ListA
ObservableCollection<ModelB>
中的ViewModelB
,然后重复使用ViewA
。有没有办法做到这一点?
答案 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);
}
或类似的东西?然后,您可以ValidiationServiceA
将ViewModelA
和ValidiationServiceB
注入ViewModelB
。