如何使用MVVM Light获得ViewModel的多个唯一实例?

时间:2012-10-23 20:58:14

标签: wpf mvvm mvvm-light

我很擅长遵循MVVM模式。我正在使用MVVMLight。我想知道如何使用MVVM Light的ViewModel的多个唯一实例。例如,我有一个可以打开n个窗口的应用程序。每个使用相同的Viewmodel。我很好奇MVVM中最好的实际情况是给他们自己的实例。

如果我遵循MVVM Light示例,ViewModeLocator将只有一个静态实例,每个窗口最终都会使用它。

提前致谢。

2 个答案:

答案 0 :(得分:9)

易:

public EndingViewModel EndingViewModel
{
    get 
    { 
      return ServiceLocator.Current.GetInstance<EndingViewModel>(Guid.NewGuid().ToString()); 
    }
}

从ServiceLocator解析时,请确保对GetInstance的调用将唯一值传递给该方法。在上面的例子中,我传入了一个guid。

我真的不会手动构建你的对象,因为这会破坏在MVVM Light中使用Dependency Injection容器。

答案 1 :(得分:5)

您没有义务仅在视图模型定位器中使用静态视图模型。如果您的视图共享相同的视图模型实例,那么这种方法才有意义。对于您的场景,您只需新建一个视图模型实例并将其分配给您创建的每个窗口的DataContext属性。

public void ShowChildWindow(Window parent)
{
    var window = new WindowView();
    window.DataContext = new ViewModel();
    window.Show();
}