MVVM Light中ViewModel实例的可混合性

时间:2013-08-06 13:01:23

标签: c# wpf mvvm mvvm-light

之前我曾经使用过MVVM,但是MVVM-Light让我感到困惑,所以如果这很愚蠢我就很抱歉(只是那些任何文档)。

无论如何,我已经知道你只使用ViewModelLocator来自Laurent的回答here的“单身”观点。

那么我该如何处理不在定位器中的视图模型?因为看起来我失去了MVVM-Light的好处。

我现在要做的是转到视图的代码隐藏,并为我的视图模型创建一个依赖属性,并将我的数据上下文设置为它。

有更好的方法吗?因为我没有任何可混合性(Visual Studio和ReSharper甚至不能识别XAML编辑器中的数据上下文)。更不用说我没有可设计的伪数据了。

换句话说:
从我看到的可混合性来自依赖注入找到定位器,那么当你不使用定位器时你会怎么做?

1 个答案:

答案 0 :(得分:1)

将我的评论转换为答案

  

AFAIK您可以通过在从ServiceLocator解析VM时传递唯一键来获取新的VM实例。你不必仅仅依靠单独使用VMLocator。

您可以从Here获取此过程的示例。在MainWindow.xaml.cs中,当请求新的非模态窗口时,视图的每个实例都与相应VM的新实例耦合,该实例可以在代码隐藏中找到。

  

如何将视图模型实例绑定到视图(不在定位器中)

^^不确定这是否是您所追求的,但是对于MVVM Light(对于设计时间VM),在检查是否处于设计模式后,您可以在其构造函数中设置DataContext

类似的东西:

using GalaSoft.MvvmLight;
...

public MainWindow() {
  InitializeComponent();
  if (ViewModelBase.IsInDesignModeStatic)
    DataContext = new MainViewModel();
}