WPF / MVVM alpha极客说:
1 View有1个ViewModel。有时多个视图有1个ViewModel(使用向导)。
如果你看我的图像,你会看到6个彩色的视图/用户控件。
YELLOW,GREEN和ORANGE UserControls 在我的应用程序中多次使用。
粉色,蓝色和红色UserControl仅使用一次。
问题:
1。我应该将它们作为UserControls吗?如果是的话,为什么我不重复使用它们。
2. 假设这些是6个UserControl,它们是否应该共享相同的ViewModel? 或者每个View都有自己的ViewModel?
一个。) 用绿色创建类代码 将课程代码发送给YELLOW
B中。) 在黄色中选择类代码 改变蓝色当前瞳孔
下进行。) 选择BLUE中的当前瞳孔 用红色改变学生的细节 在ORANGE中更改学生文档
d)。 在PINK中创建学生 将学生送到蓝色
E。)......还有更多
这是一种方法,使用Messenger类触发数据以使关系保持最新状态吗?
我有一个重大缺陷:
我创建了一个PupilViewModel,但我不知道在NewPupilViewModel(PINK)中,在YELLOW UserControl中存在一个SchoolclassCodeViewModel,所以我可以将我的新PupilViewModel添加到BLUE UserControl。
SchoolclassCodeViewModel 1:N PupilViewModel。
3. 你会如何解决这个问题?
答案 0 :(得分:3)
1)如果他们的布局有任何复杂性,我会把它们变成UserControls。首先,它更容易做到一切;另一方面,这样可以更容易地在Expression Blend中使用该控件的布局,而无需实例化整个窗口。
2)整个窗口都有应用程序视图模型。它包含需要它们的视图的属性:
ObservableCollection<ClassCodeViewModel> ClassCodes
ClassCodeViewModel NewClassCode
ClassCodeViewModel SelectedClassCode
PupilViewModel NewPupil
PupilViewModel SelectedPupil
2A)ClassCodeViewModel
公开了一个CreateCommand
,它在执行时引发了一个事件。窗口视图模型处理此事件,并在ClassCodes
引发时对其进行适当的更新。
2B)类代码视图模型包含一个可观察的瞳孔视图模型集合。窗口视图模型中SelectedItem
属性中的SelectedClassCode
属性绑定了类代码视图模型上的SelectedItem
。蓝色视图绑定到SelectedClassCode.Pupils
。
2C)同样,窗口视图模型包含一个SelectedPupil
属性,蓝色视图的SelectedItem
属性绑定到该属性。红色视图绑定到SelectedPupil
。
2D)这与在2A中处理的方式相同:瞳孔视图模型引发一个事件,窗口视图模型处理它。
3)pupil视图模型包含布尔CanCreate
属性。红色视图中不使用此选项。窗口视图模型在NewPupil.CanCreate
。
SelectedClassCode
您没有问,但橙色视图绑定到Documents
的{{1}}属性,这可能(取决于实际上是什么文档)SelectedPupil
的可观察集合对象。
也许我已经在MVVM领域工作太久了,但这对我来说似乎非常简单。