视图和视图 - 模型关系

时间:2012-06-14 06:39:47

标签: .net wpf silverlight mvvm

我的问题是:

  1. ViewModel可以/应该支持多个Views吗?
  2. 多个View可以/应该支持ViewModels吗? (我相信回答这个问题是肯定的。)
  3. 对于这种情况的最佳做法是什么,对于相对较小的模块,您的视图相对较小。因此,在这种情况下,我们应该为每个视图创建多个ViewModels,还是应该使用单个ViewModel来为同一模块中的所有视图提供服务。注意:较小模块中的视图数量限制为5-6。

2 个答案:

答案 0 :(得分:1)

以下是我对此的看法 -

  1. 是的,相同的ViewModel可用于多个视图;例如假设您有CustomerViewModel详细了解客户和一些命令,您可以将此ViewModel与DataGrid视图一起显示所有客户(因此将使用ObservableCollection<CustomerViewModel>)并且使用相同的ViewModel以及具有表单的视图来编辑单个客户的详细信息。

  2. 取决于,但通常不是。如果视图包含多个视图,则视图可以依赖于多个ViewModel;比如说,一个窗口有多个视图。例如包含客户列表的仪表板,添加新客户的表单,显示产品的部分等; 即使在这种情况下,创建单个父ViewModel总是更好,它将包含其他子视图模型的实例。

    我总是喜欢为一个视图设置一个ViewModel,并尝试以这种方式设计我的应用程序。

  3. 但是,这一切都取决于应用程序以及您如何设计视图和视图模型。在MVVM中,您首先要根据业务逻辑设计模型和ViewModel,然后将它们与您的视图一起使用。

    另请查看此类似问题 - ViewModel per View or per Model?

答案 1 :(得分:0)

这取决于。例如,如果您有一个包含一系列观察的模型,则可以使用相同的服务两个视图,一个带有图表,另一个带有网格。我的意思是你对同一个概念模型有不同的看法。如果视图是一个碎片化的页面,其子视图具有不同的东西,则最好为所有这些部分提供服务它们的特定视图模型。作为一个个人经历,我过去曾用一个单一模型提供的清晰视图,我对此不满意,最终会出现视图模型代码过于复杂并最终需要重构的情况。