我对遵循 MVVM 模式还很陌生。我正在使用 MVVMLight。我想知道如何使用 MVVM Light 拥有 ViewModel 的多个唯一实例。例如,我有一个可以打开 n 个窗口的应用程序。每个都使用相同的 Viewmodel。我对 MVVM 很好奇,给他们自己的实例最好的做法是什么。
如果我遵循 MVVM Light 示例,ViewModeLocator 将只有一个静态实例,每个窗口最终都会使用该实例。
提前致谢。
我对遵循 MVVM 模式还很陌生。我正在使用 MVVMLight。我想知道如何使用 MVVM Light 拥有 ViewModel 的多个唯一实例。例如,我有一个可以打开 n 个窗口的应用程序。每个都使用相同的 Viewmodel。我对 MVVM 很好奇,给他们自己的实例最好的做法是什么。
如果我遵循 MVVM Light 示例,ViewModeLocator 将只有一个静态实例,每个窗口最终都会使用该实例。
提前致谢。
简单的:
public EndingViewModel EndingViewModel
{
get
{
return ServiceLocator.Current.GetInstance<EndingViewModel>(Guid.NewGuid().ToString());
}
}
从 ServiceLocator 解析时,请确保对 GetInstance 的调用将唯一值传递给该方法。在上面的示例中,我传入了一个 guid。
我真的不会手动构建你的对象,因为这违背了在 MVVM Light 中拥有依赖注入容器的意义。
您不必在视图模型定位器中仅使用静态视图模型。只有当您的视图共享相同的视图模型实例时,这种方法才有意义。对于您的场景,您只需新建一个视图模型实例并将其分配给您创建的每个窗口的 DataContext 属性。
public void ShowChildWindow(Window parent)
{
var window = new WindowView();
window.DataContext = new ViewModel();
window.Show();
}