我的问题是:
- 可以/应该
ViewModel
支持多个Views
吗? - 可以/应该
View
由多个支持ViewModels
吗?(我相信这个问题的答案是肯定的)。
对于相对较小的模块,您的视图相对较小的这种情况的最佳做法是什么。因此,在这种情况下,我们应该ViewModels
为每个视图创建多个视图,还是应该使用单个ViewModel
视图来为同一模块中的所有视图提供服务。注意:较小模块中的视图数量限制为 5-6。
我的问题是:
ViewModel
支持多个Views
吗?View
由多个支持ViewModels
吗?(我相信这个问题的答案是肯定的)。对于相对较小的模块,您的视图相对较小的这种情况的最佳做法是什么。因此,在这种情况下,我们应该ViewModels
为每个视图创建多个视图,还是应该使用单个ViewModel
视图来为同一模块中的所有视图提供服务。注意:较小模块中的视图数量限制为 5-6。
这是我对此的看法——
是的,同一个 ViewModel 可以用于多个视图;例如,假设您有CustomerViewModel
一个客户的详细信息和一些命令,您可以将此 ViewModel 与一个具有DataGrid
显示所有客户的视图一起使用(因此ObservableCollection<CustomerViewModel>
将使用一个),并且还可以将相同的 ViewModel 与一个具有要编辑的表单的视图一起使用单个客户的详细信息。
这取决于,但通常 No。如果一个视图包含多个视图,则它可以依赖于多个 ViewModel;比如说,一个具有多个视图的窗口。例如具有客户列表的仪表板、添加新客户的表单、显示产品的部分等; 但即使在这种情况下,最好创建一个包含其他子视图模型实例的单个父 ViewModel。
我总是喜欢为单个视图使用一个 ViewModel,并尝试以这种方式设计我的应用程序。
但是是的,这一切都取决于应用程序以及您如何设计视图和视图模型。在 MVVM 中,您首先根据业务逻辑设计模型和视图模型,然后将它们与您的视图一起使用。
也看看这个类似的问题 - ViewModel per View or per Model?
这取决于。例如,如果您有一个包含一系列观察的模型,您可以拥有相同的两个视图,一个带有图表,一个带有网格。我的意思是你对同一个概念模型有不同的看法。如果视图是一个页面,其中包含具有不同内容的子视图,最好为所有这些部分提供一个特定的视图模型为它们服务。作为个人经验,我过去曾有过由单个模型提供的铰接视图,但我对此并不满意,您最终会遇到视图模型代码变得过于复杂并最终需要重构的情况。