【问题标题】:How to have Multiple unique instances of ViewModel using MVVM Light?如何使用 MVVM Light 拥有多个唯一的 ViewModel 实例?
【发布时间】:2012-10-23 20:58:14
【问题描述】:

我对遵循 MVVM 模式还很陌生。我正在使用 MVVMLight。我想知道如何使用 MVVM Light 拥有 ViewModel 的多个唯一实例。例如,我有一个可以打开 n 个窗口的应用程序。每个都使用相同的 Viewmodel。我很好奇 MVVM 给他们自己的实例的最佳实践是什么。

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

提前致谢。

【问题讨论】:

  • Laurent stackoverflow.com/a/2848084/762979回答的类似问题
  • MVVM 模式并不限制您只能使用视图模型的一个实例。视图模型与任何其他类一样只是一个类,您可以根据需要创建该类的任意数量的对象。 MVVM 模式的存在只是为了将业务逻辑与 UI 逻辑分离以进行单元测试。就这些。以 MVVM 的名义提出的任何其他声明很可能是某种形式的误导理想主义的结果​​,而不是任何实际的常识原因。

标签: wpf mvvm mvvm-light


【解决方案1】:

简单:

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

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

我真的不会手动构建您的对象,因为这会破坏在 MVVM Light 中拥有依赖注入容器的意义。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-06-10
      • 1970-01-01
      • 1970-01-01
      • 2013-06-04
      • 1970-01-01
      • 2013-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多