在MVVM模式中,每个视图只有一个ViewModel还是每个模型只有一个ViewModel?每个视图或每个模型的ViewModel?
回答
从理论上讲,关系
视点N - 1视图模型N - 1型
我知道,很多人会咬和打我,但...在实践中......
很多时候,在商业应用程序中,有数据访问层(DAL)。很多时候,来自DAL的实体是您的模型。有时候你应该用额外的类来包装这些实体,以提供扩展功能或者一些额外的属性。也许你有自己的模型...
ViewModels和Views(在实践中)通常有1对1的关系。类似于 - 每个屏幕(或屏幕的一部分)实际上都是配对的View和ViewModel。我认为通常就像 - View是UI层,而ViewModel是代码隐藏层。查看只是XAML文件 - 表示层。并且(最佳实践)其他的一切都应该在ViewModel中 - 所有的数据接收过程,所有的命令,所有的可变字段等等。这种方式通常可以测试ViewModel(使用单元测试)。一个ViewModel可以有多个视图(在实践中),通常只有在共享ViewModel时才能使用,例如DesktopApplication(WPF),Web Application(Silverlight)和Windows Phone。像这样的东西。但通常 - 一个ViewModel - 一个View。如果您对一个ViewModel有多个视图 - 通常您会遇到很多维护问题...
对于每个视图,每个视图模型和一个视图模型都有一个模型,而在另一个方向上,一切都是n。
视点N - 1视图模型N - 1型
对同一个视图模型可以使用多个视图,也可以使用多个视图模型为相同的看法。
许多-查看到一个视图模型:
例如,在主详细的安排,你可以把你的视图模型到一个ObservableCollection并且在您绑定的项目列表框呈现它们显示给Title属性的ViewModel。 ListBox呈现视图模型的一个视图。然后,ListBox.SelectedItem被绑定到不同的视图,该视图呈现所选模型的细节。
一观众的ViewModels:
了一组视图模型中都承担着相同的属性名称,你可以展示所有的视图模型在同一视图开始。例如,您可以有一个由Title属性和ModelValue属性组成的简单视图模型。在所有视图模型中,Title属性都是字符串,但是每个不同的视图模型对于ModelValue属性可以具有不同的数据类型。 StringViewModel将有一个字符串ModelValue,DoubleViewModel将有一个双重ModelValue。不同视图模型的呈现可以共享相同的视图,该视图由用于呈现标题的TextBlock和用于编辑ModelValue的文本框组成。这将适用于TextBox中可编辑的任何类型。
通过混合并匹配Views和ViewModels,您可以从View和ViewModels的清晰分离中获得巨大的优势。
- 1. 把模型放在每个视图上
- 2. 服务层:每个应用程序或每个View模型有1个实例? (或者:给每个视图模型自己的数据上下文)
- 3. MVC和模型设计 - 每个json动作一个?每个视图一个?
- 4. 每个视图
- 5. 每个视图
- 6. 每个模型的多个图像
- 7. 加载一个xml文件,每个viewmodel有不同的视图?
- 8. Backbone.sync每个模型
- 9. AngularJS控制器每个视图或每个实体
- 10. 如何避免需要每个模型的VIewModel
- 11. 每个视图模型应该由单个ViewModelLocator处理吗?
- 12. Ember.js每个控制器/模型有多个视图
- 13. HKQueryAnchor每个数据类型,每个源或每个数据源的每个数据类型?
- 14. 1每个视图的ViewController?
- 15. 骨干性能 - 收集与整个收集每个模型视图或只有一个视图
- 16. 骨干集合中每个模型的渲染视图
- 17. 每个模型的angularjs自定义视图
- 18. 在一个视图中的视图模型/实体或多个视图模型的多个视图?
- 19. MVC3一个视图 - 多个部分视图 - 每个部分视图一个模型
- 20. 为每个ViewModel的每个observable设置回调函数
- 21. 获取每个Mapper中的每个键或全局Spark MapReduce模型中的每个键的计数
- 22. 每个项目或每个模块有一个DLL?
- 23. Django模型每表与模型每个选择
- 24. WPF TreeView构建 - 确实使用每个项目的视图/视图模型吗?
- 25. 将不同视图模型绑定到每个页面
- 26. 每个模块或每个路由序列化的NancyFx
- 27. 不同tabBaritems每个视图
- 28. Backbone.js每个属性渲染(多个小视图vs多个模板每个视图)
- 29. 两个视图 - 一个ViewModel
- 30. 下载Android视图中的每一个控制到每一个