mvvm问题:模型的定义,包装模型对象和模态对话框

时间:2009-08-12 01:23:35

标签: mvvm

我是mvvm的新手,我有几个问题:

是model =业务层吗?

如果我的客户模型包含订单列表,而列表或订单每个都包含项目列表,您将如何在视图中将其分开?目前,我的CustomerModel有一个CustomerViewModel。 CustomerViewModel包含OrderViewModel列表。 OrderViewModel包含ItemsViewModel列表。因此,如果我从数据层检索现有客户,我会根据现有列表创建适当的OrderViewModel和ItemViewModel。这是你通常如何实现mvvm?老实说,整个'重拍对象'并不是真的感觉正确。

我的客户视图包含订单和项目列表,每个订单和项目由其自己的用户控件表示,并使用ItemsControl重复。每个项目都有自己的添加,编辑和删除按钮。我希望有一些模式对话框,在用户使用适当的表单时禁用当前选项卡(而不是整个应用程序)。我找到的最简单的解决方案是创建一个内容控件,它具有一个可以设置的控件dp(名为Control),并在isVisible = true时自动创建矩形叠加。然后控制绑定到CustomerViewModel的dialogControl属性....我不认为这是一个正确的mvvm解决方案,因为我似乎混淆视图模型。我认为更合适的方法是在customerviewmodel中有一个viewmodel来表示对话框包含的内容,并在每个viewmodel中为它提供模板....但我似乎无法想出一种方法来实现矩形覆盖这个解决方案。

谢谢!

1 个答案:

答案 0 :(得分:0)

我也一直在争论这个想法。看起来你必须在Model和ViewModel之间重复一遍。主要原因是Model倾向于是传统对象,而ViewModel实现了INotifyPropertyChanged。对我来说,这就是区别 - ViewModel支持双向绑定。

一旦我这样想,那么模型就变成了可选项。在我的例子中,模型通常是我带来的一些库代码,或生成的数据访问层。或者换句话说,ViewModel包含功能,而Model是后备存储。

我甚至停止调用我的ViewModel类xxxViewModel或xxxVM。现在他们只是xxx。但是,它们都是从IViewModel实现的,它本身只是继承自INotifyPropertyChanged。

就您对用户控件的使用而言,我已经能够使用DataTemplates作为我的视图。对于选项卡,选项卡的ViewModel应启动模式对话框,同时应在对话框打开时将Enabled属性设置为false。当您看到Enabled属性为false时,您的标签View应自行禁用。