Mvvm 创建详细视图模型的最佳实践(在Xaml中)

Mvvm 创建详细视图模型的最佳实践(在Xaml中),mvvm,windows-runtime,Mvvm,Windows Runtime,我正在创建一个Windows8应用程序,但我怀疑任何一个使用Xaml的人都可以帮助我。它基本上可以归结为:一个页面上有一个产品列表,点击一个产品就会打开一个详细信息页面 在我的合成根目录中,我解析了第一页的视图模型,并适当地设置了数据上下文,但我不确定在用户选择产品时将视图模型传递到第2页的最佳实践是什么 据我所知,我有以下选择:- 第一个viewmodel需要一个能够创建 使用.createproduct方法创建第2页的视图模型,这将传递给第一个视图模型构造函数 让第二个视图模型实现一个带有产

我正在创建一个Windows8应用程序,但我怀疑任何一个使用Xaml的人都可以帮助我。它基本上可以归结为:一个页面上有一个产品列表,点击一个产品就会打开一个详细信息页面

在我的合成根目录中,我解析了第一页的视图模型,并适当地设置了数据上下文,但我不确定在用户选择产品时将视图模型传递到第2页的最佳实践是什么

据我所知,我有以下选择:-

第一个viewmodel需要一个能够创建 使用.createproduct方法创建第2页的视图模型,这将传递给第一个视图模型构造函数 让第二个视图模型实现一个带有产品属性的接口,允许我使用属性注入,并将第二个视图模型作为参数传递给第一个视图模型。 创建一个我知道被许多人认为是反模式的服务定位器。
我有点不知所措,但我怀疑抽象工厂是正确的选择,我想把它做好,因为对象图实际上是这个产品->步骤->指令,所以任何重新工作都可能需要相当长的时间,但这基本上意味着我的视图模型如果我沿着抽象工厂的路线走,将需要三个抽象工厂,以及用于获取产品初始列表的服务,然后这是一个给定了多少参数的代码气味

在需要从代码工厂在运行时解析视图模型的情况下,这是一种可行的方法


为了使它更容易,我也会考虑使用一些DI框架。我相信WinRT不会有太多的依赖项,但应该与metro一起使用。

如果您正在构建一些大型的应用程序,依赖项注入可能是实现这一点的方法。就我个人而言,我通常只是在Navigate调用中传递参数,然后在OnNavigatedTo处理程序中使用这些参数初始化视图模型。

这就是我的想法。我正在使用MetroIOC,所以没关系。我只是想知道,在视图模型的构造函数中包含如此多的参数是否是一个糟糕设计的标志。IMHO与依赖项注入相结合,构造函数参数的数量越多越好。无论如何,您都可以在DI配置中设置它们。当然,当数量大幅增长时,你应该重构。这就是我一直在做的,只是传递了一个视图模型。我想对你说声谢谢,因为我在Windows8上做了很多图像处理,你的一些帖子帮了我的忙!