Wpf 如何使用MVVM Light拥有ViewModel的多个唯一实例?

Wpf 如何使用MVVM Light拥有ViewModel的多个唯一实例?,wpf,mvvm,mvvm-light,Wpf,Mvvm,Mvvm Light,我是一个很新的遵循MVVM模式的人。我正在使用MVVMLight。我想知道如何使用MVVM Light创建多个独特的ViewModel实例。对于exmaple,我有一个可以打开n个窗口的应用程序。每个都使用相同的Viewmodel。我对MVVM很好奇,给他们提供自己的实例最好的做法是什么 如果我遵循MVVM Light示例,ViewModeLocator将只有一个静态实例,每个窗口最终都将使用该实例 提前感谢。您不必在视图模型定位器中仅使用静态视图模型。只有当视图共享同一视图模型实例时,这种方法

我是一个很新的遵循MVVM模式的人。我正在使用MVVMLight。我想知道如何使用MVVM Light创建多个独特的ViewModel实例。对于exmaple,我有一个可以打开n个窗口的应用程序。每个都使用相同的Viewmodel。我对MVVM很好奇,给他们提供自己的实例最好的做法是什么

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


提前感谢。

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

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

public EndingViewModel EndingViewModel
{
得到
{ 
返回ServiceLocator.Current.GetInstance(Guid.NewGuid().ToString());
}
}
从ServiceLocator解析时,确保对GetInstance的调用将唯一值传递给该方法。在上面的示例中,我传入了一个guid


我真的不会手动构建对象,因为这会破坏依赖项注入容器在MVVM中的作用。

Laurent回答了类似的问题MVVM模式不会将您限制为视图模型的一个实例。视图模型与任何其他类一样只是一个类,您可以根据需要创建该类的任意多个对象。MVVM模式的存在只是为了将业务逻辑与UI逻辑分离,以便进行单元测试。仅此而已。以MVVM名义提出的任何其他主张很可能是某种形式的误导性理想主义的结果,而不是任何实际的常识性理由。
public EndingViewModel EndingViewModel
{
    get 
    { 
      return ServiceLocator.Current.GetInstance<EndingViewModel>(Guid.NewGuid().ToString()); 
    }
}