【发布时间】:2012-11-26 21:47:16
【问题描述】:
我是 WPF/MVVM 的新手,我发现的示例似乎并未涵盖我面临的问题。
我有一个用于管理相当复杂的业务配置对象的屏幕。在 MVVM 中,我认为这意味着我应该拥有以下内容:
- 逻辑接近于零的 XAML 视图
- 具有屏幕逻辑的 ViewModel 类
- 我平时的业务类填补了 Model 的角色,拥有了所有的业务逻辑
在我的情况下,有一些业务规则说更改我的业务类的 fieldA 可能会产生各种副作用,例如更改 fieldB 的值,或填充整个子对象列表。
我可能是错的,但我认为我应该将这些规则封装在业务类中,因为这些规则实际上与其说是关于屏幕,不如说是关于实体。
当然,这些副作用需要立即回到屏幕上。
所以从用户的角度来看,他可能会编辑 fieldA,并在 View 上看到 fieldB 更新。
我了解如何将数据从 View 绑定到 ViewModel。
但就我而言,我似乎需要两层数据绑定:一层在 View 和 ViewModel 之间,另一层在 ViewModel 和 Model 之间。
鉴于我两次遇到基本相同的问题,我认为应该采用一种解决方案。所以我把我的 Model 类变成了一个 DependencyObject,我把它的属性变成了 DependencyProperties。
以 fieldA 为例,它会出现在所有三层中:
- 作为数据绑定到 ViewModel.FieldA 的可视化组件查看,例如 text="{Binding FieldA, Mode=TwoWay}"
- ViewModel 作为 DependencyProperty “向上”绑定到视图,“向下”绑定到模型
- 作为 DependencyProperty 的模型
我不希望通过跳过第 2 部分来直接将我的 View XAML 耦合到业务对象,这对我来说似乎不是一个干净的模式应用程序。或许这是误入歧途。
我的 ViewModel 中似乎需要一个“传递 DependencyProperty”。
我的问题:
- 这是正确的通用方法还是我认为这一切都错了?
- 是否有使用这种传递方法的示例?
- 谁能给出一个代码示例,说明在 ViewModel 和 Model FieldA DependencyProperties 之间创建传递绑定的正确方法?
【问题讨论】: