【问题标题】:What is the purpose of the View Model Locator?View Model Locator 的用途是什么?
【发布时间】:2015-07-20 20:48:14
【问题描述】:

我对 MVVM Light 中使用的 View 模型定位器感到困惑。我知道它允许将特定视图的数据上下文绑定到定位器类中的静态视图模型实例。

但是为什么我们需要一个包含所有视图模型实例的单独定位器类呢?它的优点是什么?除了实例化视图模型和数据上下文目的之外,定位器还使用了什么? 例如,您可以在后面的代码中实例化视图模型,并将其设置为视图的数据上下文。

【问题讨论】:

  • 依赖注入也由定位器管理

标签: c# wpf mvvm viewmodel mvvm-light


【解决方案1】:

我使用视图模型定位器是因为我喜欢将我的视图写为“视图优先”,而不是很多人喜欢的“视图模型优先”。我认为“先查看”更有意义。不仅如此,假设您已正确设置所有内容,它还允许您通过 DI 自动更新您的虚拟机。这样您就不必手动新建它们并设置 DataContexts 等。

【讨论】:

    【解决方案2】:

    使用 ViewModelLocator 有几个原因。

    设计时数据

    将 ViewModel 连接到 XAML(与代码隐藏相反)意味着您在使用设计器时拥有一个活动的 ViewModel。如果你在代码隐藏中连接它,你就不会明白这一点。这意味着您在设计页面时看不到 ViewModel 的任何属性,也不会自动完成 XAML 绑定等。

    依赖注入

    借助 ViewModelLocator,您可以轻松利用依赖注入的强大功能。您无需手动构建 ViewModel,它们会使用适当的依赖项(服务)自动创建。

    为设计或测试服务连接不同的实现

    与上面的项目相关,使用 ViewModelLocator 可以让您轻松地将不同的服务用于不同的目的。例如,您可能不想将“真实的”Web 服务用于设计时数据。您也可以在代码隐藏中执行此操作,但您必须一遍又一遍地执行此操作。

    但最重要的是

    MVVMLight 是一个模块化的框架。你可以使用你喜欢的部分,而忽略你不喜欢的部分。因此,如果您更喜欢在代码隐藏中连接 ViewModel(也许您不喜欢 DI 并且您不关心设计时数据),那么没有什么可以阻止您这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-02
      • 2012-02-10
      • 2012-06-19
      • 2011-10-28
      • 2012-06-03
      • 1970-01-01
      • 2011-02-13
      相关资源
      最近更新 更多