博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ViewModelLocator
阅读量:5269 次
发布时间:2019-06-14

本文共 1964 字,大约阅读时间需要 6 分钟。

原文:

ViewModelLocator

这里先鼓舞下士气,ViewModelLocator很简单,甚至可以去掉,它不是Mvvm必须的。在初学Mvvm时,一般都是使用NuGet安装

MvvmLight框架,总是会带上那么一个ViewModelLocator,并且还加入到了全局资源中,到底是干吗的?

public class ViewModelLocator    {        ///         /// Initializes a new instance of the ViewModelLocator class.        ///         public ViewModelLocator()        {            ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);            SimpleIoc.Default.Register
(); } public AppViewModel Main { get { return ServiceLocator.Current.GetInstance
(); } } public static void Cleanup() { // TODO Clear the ViewModels } }

上面就是一个具有基本功能的试图模型定位器,它的作用就是访问ViewModel,你想用哪个ViewModel就在这里找,构造函数中首先注册一个AppViewModel类型

然后通过Main属性暴露出来,当我们访问Main属性的时候,就会把AppViewModel的实例返回,注意SimpleIoc默认是
单实例的,返回的是同一个Main

注意:在构造该对象时,我们将MvvmLight自带的SimpleIoc容器指定作为默认服务提供者,

这里为什么要使用ServiceLocator又将SimpleIoc容器包裹一层,
其实在运行时,我们直接使用SimpleIoc也是没有问题的,
这里主要是考虑到一个设计时的显示效果,
设计时就能在设计窗口看到ViewModel中的数据。

接下来我们看如何使用ViewModelLocator,在使用NuGet安装MvvmLight时,会自动给我们的App.xaml加入一个Resource

ViewModelLocator就作为一个全局资源引用到了程序中,注意在App类初始化时,就会去初始化ViewModelLocator。

这样我们在界面上就可以使用全局资源找到对应的ViewModel。

这里将AppView的DataContext设置为全局静态资源中的Main,此时,在VS的可视化窗口中,就会看到数据已经绑定上。

总结一下:这里我们首先有一个ViewModelLocator,然后又是资源,又是Binding,其实目的就是为了在设计时,能够

将数据友好的显示,即时看到效果。我们完全可以把这个ViewModelLocator删除,在AppView的构造函数中,将DataContext
设置为AppViewModel

public AppView()        {            this.DataContext=new AppViewModel();        }

当然呢,这种做法很粗鲁,设计时也不会看到绑定的数据。ViewModelLocator的作用就是这么点,也不是很复杂。

SimpleIoc

这个需要了解一下IOC是什么,,也很生动。

IOC的内容很大,在Mvvm中自带了一个Ioc容器,SimpleIoc,之所以叫SimpleIoc,是因为它的确很简单,仅仅是作为
对象容器来使用的。例如在设计时的数据可视化效果中,向View的DataContext提供对应的ViewModel。
实际开发中,我们会使用更加灵活的Ioc,例如:MEF,园子里有。

posted on
2018-09-20 09:22 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/lonelyxmas/p/9678920.html

你可能感兴趣的文章
win8快捷键
查看>>
mysql explain执行计划详解
查看>>
Docker安装GitLab
查看>>
windows下面安装Python和pip终极教程
查看>>
Hadoop基本概念
查看>>
java.util.zip压缩打包文件总结一:压缩文件及文件下面的文件夹
查看>>
JavaScript高级程序设计(四): 关键字With的使用
查看>>
浅说 apache setenvif_module模块
查看>>
MySQL--数据插入
查看>>
判断一个元素有没有条件
查看>>
[JLOI2011]飞行路线 (分层图,最短路)
查看>>
重新学习python系列(二)? WTF?
查看>>
android开发常用地址
查看>>
SSH框架整合配置所需JAR包(SSH整合)
查看>>
PHP函数
查看>>
html5多媒体Video/Audio
查看>>
宽高自适应
查看>>
如何安装windows7
查看>>
[主席树]HDOJ4348 To the moon
查看>>
shell脚本统计文件中单词的个数
查看>>