1.几乎没有逻辑的XAML视图 2.具有屏幕逻辑的ViewModel类 3.我的业务类填充了Model角色,并具有所有业务逻辑
在我这种情况下,业务规则指出更改业务类的FieldA可能会产生各种副作用,例如更改FieldB的值或填充整个子对象列表。但我认为这些规则应该封装在业务类中,因为这些规则与实体相关,而不是与屏幕相关。自然地,这些副作用需要立即反映在屏幕上。
因此,从用户的角度来看,他可以编辑FieldA,并在View上看到FieldB的更新。我了解如何从View到ViewModel进行数据绑定。但在我的情况下,似乎我需要两个层次的数据绑定:一个在View和ViewModel之间,另一个在ViewModel和Model之间。
考虑到我基本上两次遇到相同的问题,我认为应该应用一种解决方案。因此,我将我的Model类转换为DependencyObject,并将其属性转换为DependencyProperties。例如,查看FieldA,它会出现在所有三个层面上:
1.作为一个视觉组件出现在View中,绑定到ViewModel.FieldA,例如text="{Binding FieldA, Mode=TwoWay}" 2.作为DependencyProperty绑定到ViewMode,向上绑定到View,向下绑定到Model 3.作为DependencyProperty出现在Model中
我不愿意通过跳过第2部分直接将我的View XAML与业务对象耦合在一起,因为这对我来说似乎不是一个干净的应用程序。也许这是错误的。因此,我似乎需要在ViewModel中使用“传递属性”的想法。
我的问题:
1.这是正确的一般方法还是我想错了? 2.是否有使用这种传递方法的示例? 3.有人能给出一个正确创建ViewModel和Model FieldA DependencyProperties之间传递绑定的代码示例吗?
INotifyPropertyChanged
处理向视图的通知和通过IDataErrorInfo
处理验证错误。域对象可以被Web服务消耗或通过它们传输(例如到Silverlight客户端)。视图特定的细节会妨碍这一过程。 - Steve Py