我是相当新的MVVM,我有几个问题:MVVM问题:模型的定义,包装模型对象和模态对话框
是模型=业务层?
如果我有一个客户模型,其中包含订单列表和订单,每个订单都包含项目列表,那么您如何将它在视图中分开?目前,我的CustomerModel有一个CustomerViewModel。 CustomerViewModel包含OrderViewModel的列表。 OrderViewModel包含ItemsViewModel的列表。因此,如果我从数据层中检索现有客户,那么我会根据现有列表创建合适的OrderViewModel和ItemViewModel。这是你通常如何实现mvvm?说实话,整个“重新包装的对象”并不真的感觉正确。
我的customerview包含订单和项目列表,每个订单和项目都由其自己的用户控件表示并重复使用ItemsControl。每个项目都有自己的添加,编辑和删除按钮。我想要有某种模式对话框禁用当前选项卡(而不是整个应用程序),而用户呈现适当的形式。我找到的最简单的解决方案是通过创建一个内容控件来创建一个控件dp(名为Control),您可以设置它,并在isVisible = true时自动创建矩形叠加层。然后控制绑定到CustomerViewModel的dialogControl属性....我没有看到这是一个适当的mvvm解决方案,因为我似乎混淆视图与视图模型。我认为更正确的方法是在customerviewmodel中有一个视图模型,它代表对话框中包含的视图模型,并为每个视图模型中的视图模型提供一个模板....但我似乎无法想出一种方法来实现矩形覆盖此解决方案。
谢谢!
我同意你的定义以及ViewModel和Model之间的区别,但是你对在Model级别维护的属性做什么需要通过绑定来公开?模型层是否可以实现INotifyPropertyChanged,如果不是,您将如何获得模型上的属性以将视图更改为视图? – ScottCher 2010-03-15 15:21:12
@ScottCher:这确实是一个架构问题。没有办法自动将所有更改自动引发到一个普通的旧对象,直到包装它的ViewModel,除非您定义事件来做到这一点。在我的情况下,我使用不可变的模型对象,所以我没有这个问题。 ;) – 2010-03-21 17:56:24