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

mvvm问题:模型定义、包装模型对象和模态对话框,mvvm,Mvvm,我是mvvm的新手,我有几个问题: 模型=业务层吗 如果我有一个包含订单列表的客户模型,并且每个订单都包含项目列表,那么您将如何在视图中对此进行分隔?目前,我的CustomerModel有一个CustomerServiceWModel。CustomerViewModel包含OrderViewModel的列表。OrderViewModel包含ItemsViewModel的列表。因此,如果我从数据层检索现有客户,那么我将基于现有列表创建相应的OrderViewModel和ItemViewModel。

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

模型=业务层吗

如果我有一个包含订单列表的客户模型,并且每个订单都包含项目列表,那么您将如何在视图中对此进行分隔?目前,我的CustomerModel有一个CustomerServiceWModel。CustomerViewModel包含OrderViewModel的列表。OrderViewModel包含ItemsViewModel的列表。因此,如果我从数据层检索现有客户,那么我将基于现有列表创建相应的OrderViewModel和ItemViewModel。这就是您通常实现mvvm的方式吗?老实说,整个“重写对象”感觉不太对

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


谢谢

我也一直在为这个想法争论不休。似乎您必须在模型和ViewModel之间重复自己的操作。这主要是因为模型往往是传统对象,而ViewModel实现了INotifyPropertyChanged。对我来说,这就是区别——ViewModel支持双向绑定

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

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


就您对用户控件的使用而言,我可以在视图中仅使用数据模板。对于选项卡,选项卡的ViewModel应启动模式对话框,同时应在对话框打开时将Enabled属性设置为false。当选项卡视图看到Enabled属性为false时,它应该禁用自身。

我同意您的定义以及ViewModel和Model之间的区别,但是对于需要通过绑定公开的在模型级别维护的属性,您该怎么做?模型层是否可以实现INotifyPropertyChanged?如果不能,您将如何使模型上的属性将更改冒泡到视图中?@ScottCher:这确实是一个架构问题。除非定义事件,否则无法将对普通旧对象的所有更改自动冒泡到包装它的ViewModel。在我的例子中,我使用的是不可变的模型对象,所以我没有这个问题