MVVM - 工作空间中的几个工作空间似乎没有意义

时间:2010-05-06 19:53:08

标签: wpf mvvm viewmodel workspace

那么如何展示其模型彼此之间存在关系的复杂聚合ViewModels

没有wpf门徒谈过这个,猜猜为什么不可能......

你认为那是真的吗?

不要理解我吗?

请注意: CustomerViewModel 包含许多 OrderViewModel 以及那些 ProductViewModel

您有 3个工作区来输入所有 3个ViewModel 的新数据,并且您有 3个列表框/ combobo / datagrid 来多选集合type => customerVM s, orderVM和productVM`s。

UI对用户有意义,他不需要关闭/在工作区中添加每个新的客户/订单/产品,这是一个糟糕的用户体验,你如何做这个典型的LOB应用程序要求?

修改

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

声明:我想使用goold成熟的windows表单用户界面没有可关闭的viewmodels ... 问题:MVVM只能用于工作空间(可关闭无关紧要......),因为必须已经实例化CustomerviewModel,然后将其添加到绑定到itemsControl和datatemplated的工作空间集合中,具体取决于数据类型。

如果我没有工作空间来保存我的ViewModel实例,我无法对其进行数据处理,因为MVVM中的ViewModel将模型作为构造函数参数。 使用CustomerViewModel的DataType DataTemplating UserControl将在XAML中抛出异常!

现在看看我想要的UI:我没有工作空间,但是3个ViewModels = 3个UserControls数据模板意味着3次大爆炸......

你现在得到我不喜欢MVVM的原因?它没有深思熟虑,我寻求解决方案......

当然,我可以将我的ViewModel也称为DataFormulars放在ObservableCollection中,但我不希望它们绑定到ItemsControl。我希望这3个UserControl在我的布局中有一定的位置。使用ItemsControl你有一个愚蠢的队列,如果它不适合现有的空间,只需添加和包装一个新的Dataformular。多数民众赞成是垃圾布局设计/坏UI。

你现在找我?

1 个答案:

答案 0 :(得分:2)

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

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