在MVVM中,每个View Model只能有一个View?

时间:2011-04-09 19:08:49

标签: .net wpf silverlight xaml mvvm

我在这里读到:

http://msdn.microsoft.com/en-us/library/gg405484(v=pandp.40).aspx

  

通常是一对一的   视图与其之间的关系   查看模型。

这意味着通过设计他们并不能真正应对多种观点?

5 个答案:

答案 0 :(得分:2)

我认为这在实践中通常就是这种情况。然而,将表示分离为View和ViewModel的美妙意味着您可以轻松地创建许多不同的视图,每个视图显示来自模型的基本相同的数据,所有视图都共享相同的ViewModel类(可能或可能不相同实例)。例如,我可以拥有简单高级我的数据视图,主要在XAML中编写为两个完全不同的UserControl,两者共享相同的ViewModel(类或实例) 。如果不使用MVVM,如果不重复代码,这将更加棘手。

答案 1 :(得分:2)

在MVVM中,您有一个View(演示文稿)和一个ViewModel(逻辑),旨在支持演示文稿的需求。您可以轻松地为ViewModel创建多个视图,这通常是预期的,主要是在您有多个DataTemplate对象(这是一个视图)的情况下,这些对象基于使用它的上下文绑定到单个ViewModel类型。 / p>

虽然这些通常是一对一的映射,但这不是限制,而是约定,并且MVVM模式中没有“设计限制”。

答案 2 :(得分:2)

我认为没有限制,完全取决于您的设计和要求。您可以为单个ViewModel创建多个View以显示不同的UI表示。

答案 3 :(得分:1)

正确。通常,视图模型专门针对一个视图而设计。它没有关于视图中使用的特定控件的任何知识,但它确实具有结构和功能知识。拥有多个视图和一个视图模型通常会使视图模型类违反单一责任原则。

虽然有时候有几个视图和一个视图模型确实有意义。例如,同一视图的基本版和高级版。在基本版本中,您只需隐藏一些部分或以简化的方式呈现信息,并简化功能。在这种情况下,为这两个视图创建一个视图模型是绝对可以的,否则您将不得不复制大部分视图模型的代码。

MVVM模式不强制视图和视图模型之间的一对一关系,但在大多数情况下,它是推荐的方法。如果你想为一个视图模型提供多个视图,你应该在走这条路之前仔细考虑,因为你最终可能会得到一个视图模型,其中一半的成员被一个视图使用而另一半被另一个视图使用。

答案 4 :(得分:0)

我实际上使用了这样一个事实,即在项目中没有强制执行这种一对一的关系。

我们有一个警报vm,我们希望在我们的一个视图的列表中显示它们,但是当有新的警报并在主屏幕中执行时,它还会弹出通知。 通过将弹出控件的数据上下文设置为警报vm,我们可以轻松实现此功能。