0

那么如何显示模型相互关联的复杂聚合视图模型呢?

没有 wpf 弟子说过这件事,猜猜为什么它不可能......

你认为那是真的吗?

不明白我吗?

看:一个CustomerViewModel有很多OrderViewModel和那些ProductViewModel

您有3 个工作区来为所有3 个 ViewModel输入新数据,并且您有3 个列表框/组合/数据网格来多选类型 => customerVMs, orderVM和 productVM 的集合。

UI 对用户来说是有意义的,他不需要关闭/打开工作区每个新客户/订单/产品添加什么是糟糕的用户体验,你如何满足这个典型的 LOB 应用程序要求?

编辑:

您在 MVVM 中有一个 WorkSpace 类型的集合。每个 ViewModel 都可以是一个 Workspace,因为它派生自 WorkSpace 类。Workspaces 集合绑定到 ItemsSource afair josh smith 示例。

声明:我想使用 goold 成熟的 windows 窗体用户界面,没有可关闭的视图模型...... 问题:MVVM 只能与工作区一起使用(可关闭的无关紧要......)因为 CustomerviewModel 必须已经实例化,然后添加到绑定到的工作区集合itemsControl 和 datatemplated 取决于数据类型。

如果我没有保存我的 ViewModel 实例的工作区,我无法对它们进行数据模板化,因为 MVVM 中的 ViewModel 将模型作为构造函数参数。使用 CustomerViewModel 的 DataType 对 UserControl 进行数据模板化将在 XAML 中引发异常!

现在看看我想要的 UI:我没有工作区,但 3 ViewModels = 3 UserControls datatemplated 意味着 3 次大爆炸......

你现在明白为什么我不喜欢 MVVM 了吗?它没有经过深思熟虑,我正在寻找解决方案......

当然,我可以将我的 ViewModels aka DataFormulars 放在 ObservableCollection 中,但我不希望它们绑定到 ItemsControl。我希望这 3 个 UserControl 在我的布局中有一定的位置。使用 ItemsControl,您有一个愚蠢的队列,如果新的 Dataformular 不适合现有空间,则会在其中添加和包装。这就是垃圾布局设计/糟糕的用户界面。

你现在得到我了吗?

4

1 回答 1

2

您可以轻松地在一个 Window 中拥有多个控件,每个控件都绑定到不同的 ViewModel。为了在 VM 之间进行协调,一种典型的方法是使用消息传递将不同的组件松散地耦合在一起。例如,您的 Customer ViewModel 可能会发送一条消息说您选择了一个订单,然后您的 OrderViewModel(可能在您的主窗口的一部分中可视为一个控件)将看到该消息并更改显示的订单。

您可以使用共享服务类完成类似的操作,该类公开您注入到每个 VM 中的接口。然后,您可以绑定此共享接口的属性以允许 VM 进行通信,这与使用消息的方式非常相似。我使用与此类似的东西来表示“SelectedObject”概念,其中可以选择各种不同的对象类型,并且我的应用程序中的不同 VM 有不同的方式来可视化它。例如,使用您的示例,如果产品成为 SelectedObject,您可能有一个“详细信息”面板,现在使用一些标准 ProductDataTemplate 呈现产品,并且可能另一个面板(显示订单)会更改产品列表上的 SelectedItem。您可以轻松拥有多个“工作区”

于 2010-05-07T13:44:01.503 回答