Wpf MVVM:将模型与ViewModel解耦

Wpf MVVM:将模型与ViewModel解耦,wpf,model,unity-container,prism,viewmodel,Wpf,Model,Unity Container,Prism,Viewmodel,我刚刚开始学习使用Prism和Unity的WPF MVVM。 将视图与viewmodel分离效果很好,但我不知道如何连接viewmodel和模型。 我觉得仅仅在viewmodel中创建一个新的EntityObject是不对的。我已经略读了WAF BookLibrary示例,但它非常庞大,并且在基本部分(视图和viewmodel之间的绑定)周围添加了很多额外的内容,而且Prism文档(据我所知)没有对viewmodel-model交互说一句话 是否有人知道一个好的来源,解释如何使用viewmode

我刚刚开始学习使用Prism和Unity的WPF MVVM。 将视图与viewmodel分离效果很好,但我不知道如何连接viewmodel和模型。 我觉得仅仅在viewmodel中创建一个新的EntityObject是不对的。我已经略读了WAF BookLibrary示例,但它非常庞大,并且在基本部分(视图和viewmodel之间的绑定)周围添加了很多额外的内容,而且Prism文档(据我所知)没有对viewmodel-model交互说一句话

是否有人知道一个好的来源,解释如何使用viewmodel和model在一个干净的方式,或者可以给我一些建议

致意


杰伊

每个人对此都有自己的看法。就个人而言,我不介意在视图模型中直接使用模型。对我来说,视图模型的全部思想是以视图可以使用的方式扩展模型

一个简单的例子是person对象,它将具有诸如name和age之类的模型属性。当我进入视图模型阶段时,我可能会向其添加属性,如可见性,这在模型本身上是没有意义的

注意的另一点是,我认为模型是数据,视图模型是上下文。因此,您可能有一个人的“卡片”视图模型,但也可能有一个“列表项”视图模型,它在不同的上下文中表示相同的模型,具有不同的视图模型特定属性

我确实倾向于在相关的地方使用接口构建模型,并使用控制反转将它们注入到视图模型中,这样我的视图模型实际上只知道它需要一个IPerson,并且它将在构造函数中提供


正如我所说,其他人会有不同的想法,所有的想法都是正确的,由你自己决定哪一个适合你的需要。

来吧,总有一个结局,否则你可能会把所有的类型都转换成
动态的
@will:我认为他更多的是寻找组合建议,而不是把所有的东西都扩展到泛型中。对于很多人来说,组合是最难掌握的概念之一,因为你必须详细了解你的应用程序将如何组合在一起。谢谢你的回答。我开始意识到实现MVVM和松耦合并没有黄金之路。@Jay:不,并没有。每个人都会对如何做有自己的想法。我觉得最好从下面的角度思考。这样,视图将确定vm内容,vm将确定模型的组成方式。基本上,在有意义的地方将功能折叠到较低的级别。如果你的虚拟机有名字和姓氏,那么他们是被推到模型中的候选者,而作为一个名为NavigateToSomePage的方法,在ViewModel之外是没有意义的。@Jay:而且,模型只是一个巢穴也没有什么价值,它可以是一个或多个类,而视图模型只是在视图上下文中包装和扩展的一个或多个此类的分组。这意味着你的细节视图模型可以从模型层中的几个类中提取,模型和视图模型之间不存在1对1的关系,也不应该存在。我只是喜欢“对我来说,视图模型的整个思想是以这样一种方式扩展你的模型,即视图可以使用它”-这是一个非常实用的解释虚拟机的好方法。@RichardOD:谢谢:)一旦我脑子里有了这个概念,MVVM就变得更容易使用了。。。。还有更多的乐趣!