作者:家具销售_903 | 2023-09-02 11:33
如果我的域对象实现了IDataErrorInfo,并且我使用的是MV-VM,那么如何通过ViewModel将错误传播到View?如果我直接绑定到模型,我会在绑定时将"ValidateOnExceptons"和"ValidateOnErrors"属性设置为true.但是我的ViewModel没有实现IDataErrorInfo.只有我的模特.我该怎么办?
澄清
我正在处理在域对象中实现IDataErrorInfo的现有代码库.我不能在我的视图模型中实现IDataErrorInfo.
1> MarioH..:
您可以在VM中另外实现IDataErrorInfo,并将对VM的调用路由到相应的域对象.我认为这是将域对象直接暴露给视图的唯一方法.
2> gcores..:
如果您使用的是MV-VM,ViewModel应该定义IDataErrorInfo接口,而不是模型.
您可以说IDataErrorInfo接口仅适用于视图,并且它不属于模型,但这是样式问题.
让ViewModel实现IDataErrorInfo接口并从模型传播错误将是最简单的答案.
@Pat我不确定我同意这一点.该模型不应受到UI问题的污染.在模型中实现几个接口只是为了让UI感觉愉快感觉不对,这就是ViewModel的用途.然后,这一切都取决于模型的复杂性,项目的大小和类型等.我认为没有一个真正的答案.但我会尽量保持模型清除业务逻辑之外的任何问题.
这个答案与MS的最佳实践相矛盾(http://msdn.microsoft.com/en-us/library/gg405484(v=PandP.40).aspx):通常,该模型实现了易于绑定到的设施风景.这通常意味着它通过INotifyPropertyChanged和INotifyCollectionChanged接口支持属性和集合更改通知.该模型还可以通过IDataErrorInfo(或INotifyDataErrorInfo)接口支持数据验证和错误报告.这些接口允许在值更改时通知WPF和Silverlight数据绑定,以便可以更新UI