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