我对MVVM Light中使用的View模型定位器感到困惑。我知道它允许将特定视图的数据上下文绑定到定位器类中的静态视图模型实例。
但为什么我们需要一个包含所有视图模型实例的单独定位器类?有什么优点呢?除了实例化视图模型和数据上下文之外,定位器还使用了什么? 例如,您可以在后面的代码中实例化视图模型,并将其设置为视图的数据上下文。
答案 0 :(得分:0)
我使用视图模型定位器,因为我喜欢将我的视图写成"先查看"而不是"首先查看模型"很多人都喜欢这样做。我认为"先看"更有意义。不仅如此,它还允许您的虚拟机通过DI自动刷新,假设您已正确设置所有内容。这样你就不必手动新建它们并设置DataContexts等等。
答案 1 :(得分:0)
使用ViewModelLocator有几个原因。
设计时间数据
将ViewModel连接到XAML(而不是代码隐藏)意味着您在使用设计器时拥有活动的ViewModel。如果你在代码隐藏中连接它,你就不会得到它。这意味着您在设计页面时看不到ViewModel中的任何属性,不会自动完成XAML绑定等。
依赖注入
使用ViewModelLocator,您可以轻松利用依赖注入的强大功能。您不需要手动构建ViewModel,它们会使用适当的依赖项(服务)自动创建。
为设计或测试服务配置不同的实现
与上述项目相关,使用ViewModelLocator可以轻松地将不同的服务用于不同的目的。例如,您可能不想使用" real"用于设计时间数据的Web服务。您也可以在代码隐藏中执行此操作,但是您必须反复执行此操作。
但最重要的是
MVVMLight是一个模块化的框架。您可以使用您喜欢的部分,而忽略您不喜欢的部分。因此,如果您更喜欢在代码隐藏中连接ViewModel(也许您不喜欢DI而且您不关心设计时数据),那么就没有什么能阻止您这样做了。