什么是MVVM VIEW第一种方法?

时间:2012-01-22 17:55:08

标签: c# mvvm view viewmodel

我正在PluralSight的Brian Lagunas学习MVVM。

一开始,他正在撰写这两个界面:

public interface IView
{
    IViewModel ViewModel {get;set;}
}

public interface IViewModel
{
    IView View {get;set;}
}

我在那种模式下学习,然后他从IView中删除了ViewModel。

public interface IView {}

但我看不出它的区别,也许它的优点和缺点。 如果我把第一个例子放在哪里有什么问题吗?

4 个答案:

答案 0 :(得分:6)

这当然是为了减少上下文留下任何有用的陈述,但乍一看界面

public interface IViewModel 
{
    IView View {get;set;}
}

对我来说似乎很混乱,因为MVVM模式的主要思想是ViewModel完全没有意识到View。如果您为ViewModel提供了对View的引用,那么您违反了这个想法。

答案 1 :(得分:2)

根据this blog

  
      
  • View-First:View与ViewModel有关系(通常是   通过数据绑定)。
  •   
  • ViewModel-First:ViewModel创建视图(通常通过   IoC容器)。
  •   
     

在这两种方法中,它都呈现出视角的粘性   视图模型。而且,这两者都意味着一对一的关系   而常见的情况并非总是如此。

答案 2 :(得分:0)

好吧,我还没有看到复数课程,但我可以谈谈依赖管理。在原始方案中,你有实体A知道有关A的实体B和B.在这个意义上,有两个耦合度:A取决于B而B取决于A.虽然它们只依赖于接口,是积极的,依赖仍然存在。

通过删除其中一个依赖项,您有一个场景,其中A依赖于B,但B不依赖于,关心甚至不知道A.在原始场景中,如果您对IView或IViewModel的API进行了更改,这将是破坏性的变化。在第二种情况下,您可以对IViewModel进行任何您想要的更改,它们不会影响视图实现。

这是优势。

至于缺点,唯一的一个就是你失去了方便,但我认为这并不是一个缺点。在我的书中,任何时候你都可以最小化耦合和依赖(在合理范围内),这是一个胜利。

答案 3 :(得分:0)

我认为通过ViewModel 抽象视图的想法是完全的; ViewModel公开了必须呈现给View的任何属性以及View [实践中的用户输入]可以更改的属性(想想双向绑定)。这是绑定引擎,要注意通过PropertyChanged事件将UI与ViewModel同步;通过这种方式,ViewModel不需要引用正在使用的View,它暴露给任何视图(你想使用)一些属性......

相关问题