每个视图或每个模型的ViewModel?

Sur*_*nut 13 wpf mvvm

在MVVM模式中,每个View是否只有一个ViewModel,或者每个模型只有一个ViewModel?

cho*_*dze 24

从理论上讲,关系是

查看n - 1 ViewModel n - 1模型

我知道,很多人会咬我并打败我,但......在实践中......

通常,在业务应用程序中,存在数据访问层(DAL).DAL的实体通常都是您的模型.有时您应该使用其他类包装这些实体以提供扩展功能或者某些其他属性.也许你有自己的模特......

ViewModels和Views(实际上)通常具有1对1的关系.类似的东西 - 每个屏幕(或屏幕的一部分)实际上是一个配对的View和ViewModel.我认为通常只是 - 视图是UI层,ViewModel是代码隐藏级别.View只是XAML文件 - 表示层.并且(最佳实践)其他一切应该在ViewModel中 - 所有数据接收进程,所有命令,所有可更改字段等.这种方式通常可以测试ViewModel(带单元测试).一个ViewModel通常只有在您拥有共享的ViewModel时才能拥有多个视图(实际上),例如,DesktopApplication(WPF),Web应用程序(Silverlight)和Windows Phone.像这样的东西.但通常 - 一个ViewModel - 一个View.如果你有一个ViewModel的几个视图 - 通常你会有很多维护问题......


Pal*_*esz 8

查看n - 1 ViewModel n - 1模型

  • 你能解释一下这是什么意思吗? (6认同)
  • 我不明白这在说什么。破折号是负号 (n-1) 还是分隔符?“n”是什么意思? (2认同)
  • 由于您没有解释,即使在评论中询问后,还是投了反对票。 (2认同)

H.B*_*.B. 5

每个viewmodel有一个模型,每个视图有一个viewmodel,在另一个方向上,一切都是n.


Dou*_*son 5

同一视图模型可以使用多个视图,同一视图可以使用许多不同的视图模型。

多视图到单视图模型:

例如,在主从布局中,您可以将视图模型放入ObservableCollection中,然后将它们显示在ListBox中,在其中将显示的项目绑定到ViewModel的Title属性。列表框显示了视图模型的一个视图。然后,将ListBox.SelectedItem绑定到另一个视图,该视图提供了所选模型的详细信息。

单视图到多视图模型:

从一组都共享通用属性名称的视图模型开始,您可以在同一视图中显示所有视图模型。例如,您可能有一个简单的视图模型,该模型包含Title属性和ModelValue属性。在所有视图模型中,Title属性都是字符串,但是每个不同的视图模型对于ModelValue属性可以具有不同的数据类型。StringViewModel将具有字符串ModelValue,而DoubleViewModel将具有双ModelValue。不同视图模型的表示可以共享同一视图,该视图由用于表示标题的TextBlock和用于编辑ModelValue的TextBox组成。这适用于TextBox中任何可编辑的类型。

通过混合和匹配Views和ViewModels,您可以从Views和ViewModels的清晰分离中获得很大的优势。