MVVM:单独的ViewModel的目的是什么?

时间:2017-06-19 03:10:12

标签: c# wpf mvvm viewmodel

如果View的代码隐藏只包含InitializeComponent()调用的构造函数,为什么不使用DataContext="{Binding RelativeSource={RelativeSource Self}}"并将视图本身用作视图模型?

我认为技术上违反了单一责任原则,但由于XAML和代码隐藏是彼此独立定义的,因此不会导致通常的混乱。为所有内容设置单独的视图模型会导致文件结构更加混乱。

1 个答案:

答案 0 :(得分:5)

ViewModel描述了视图状态。为了测试和重用目的,它必须是独立于UI的。 优点:

  1. 您可以通过单元测试覆盖ViewModel,但您无法引用UI 测试中的课程
  2. 您可以在其他UI目标上重复使用ViewModel: 控制台应用程序,WinForms应用程序,UWP应用程序,Xamarin iOS / Android应用程序,没有 显示物联网项目。您只需要为新目标平台编写视图。
  3. 有时即使在WPF和MVVM中,您也必须编写一些代码,仅用于View,因为它可能更简单,可读和可靠,然后为此创建一些新实体。如果您在后面的代码中也有ViewModel,那么您将变得一团糟。