1

WPF/MVVM alpha 极客说:

1 个视图有 1 个视图模型。有时 Multiple Views 有 1 个 ViewModel (使用Wizard)。

如果您考虑我的图像,您会看到 6 个彩色视图/用户控件。

在我的应用程序中多次使用黄色、绿色和橙色用户控件。

粉色、蓝色和红色的用户控件只使用一次。

问题:

1.我也应该让它们成为用户控件吗?如果是,为什么我不重复使用它们。

2.假设那些是 6 个 UserControl,它们应该共享同一个 ViewModel 吗?或者每个视图应该有自己的视图模型?

A.) 在绿色中创建 Classcode 将类代码发送到 YELLOW

B.) 在黄色中选择班级代码 用蓝色更改当前学生

C.) 在蓝色中选择当前学生 在红色中更改学生详细信息 在橙色中更改学生文档

D.) 在 PINK 中创建瞳孔 将瞳孔发送到 BLUE

E.)... 更多

这是要走的路吗,使用 Messenger 类围绕数据触发以使关系保持最新?

对我来说有一个重大缺陷:

我创建了一个 PupilViewModel,但我不知道在 NewPupilViewModel(PINK) 中 YELLOW UserControl 中是否存在 SchoolclassCodeViewModel,因此我可以将我的新 PupilViewModel 添加到 BLUE UserControl。

SchoolclassCodeViewModel 1:N PupilViewModel。

3.你会如何解决这个问题?

替代文字

4

1 回答 1

2

Dan 的方法与我要建议的方法几乎相同。要回答具体问题:

1)如果他们的布局有任何复杂性,我会让他们成为用户控件。一方面,始终如一地做所有事情更容易;另一方面,这使得在 Expression Blend 中使用该控件的布局变得更容易,而无需实例化整个窗口。

2)整个窗口都有应用程序视图模型。它包含需要它们的视图的属性:

ObservableCollection<ClassCodeViewModel> ClassCodes
ClassCodeViewModel NewClassCode
ClassCodeViewModel SelectedClassCode
PupilViewModel NewPupil
PupilViewModel SelectedPupil

2A)ClassCodeViewModel公开在CreateCommand执行时引发事件的 a。窗口视图模型处理此事件并ClassCodes在它引发时进行适当的更新。

2B)类代码视图模型包含瞳孔视图模型的可观察集合。类代码视图模型上绑定的窗口视图模型中的 SelectedItem属性中的属性。蓝视图是必然的。 SelectedClassCodeSelectedItemSelectedClassCode.Pupils

2C) 同样,窗口视图模型包含一个蓝色视图的属性绑定到SelectedPupilSelectedItem属性。红色视图是必然的SelectedPupil

2D) 这与在 2A 中的处理方式相同:瞳孔视图模型引发一个事件,窗口视图模型处理它。

3) 瞳孔视图模型包含一个布尔CanCreate属性。这在红色视图中没有使用。窗口视图模型设置NewPupil.CanCreateSelectedClassCode.

您没有问,但橙色视图绑定到 的Documents属性SelectedPupil,这可能(取决于实际的文档)是一个可观察的DocumentViewModel对象集合。

也许我在 MVVM 领域工作太久了,但这对我来说似乎非常简单。

于 2010-11-20T00:16:38.773 回答