MvvmLight框架使用入门(5)
上一次写MvvmLight框架使用入门(4)的时候还在用Visual Studio 2015,我儿子也不会过来盖上我的XPS……重启这个系列一方面是因为最近又开始写UWP的东西了,另一个是因为MvvmLight支持.NET Standard后,在使用上发生了一点小变化。在连续被问了几次
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
的兼容性问题后,我决定去调查一下事情的真相。
首先我们去Github上确认一下MvvmLight的最新版本。
https://github.com/lbugnion/mvvmlight
作者可能觉得没有什么挑战了,更新相对不再频繁。这两年最重大的改变就是对.NET Standard的支持。我们可以看到MvvmLight分为以下几个版本:

MvvmLightLibs和MvvmLight可以认为是同一个库,唯一不同后者会包含ViewModelLocator之类的帮助类。这两个库适用于WPF(.NET Framework)和UWP project。
MvvmLightAndroidSupport没用过不敢乱讲,略过。
MvvmLightLibsStd10和MvvmLightStd10也基本相同,增加了对.NET Standard的支持。这两个库适用于WPF(.NET Framework),WPF(.NET Core)和UWP project。
这里有两点值得注意:
- 只有WPF(.NET Framework)工程,才能通过MvvmLight或MvvmLightStd10,如愿生成ViewModelLocator,MainViewModel等帮助类。
- Std10版本的MvvmLight,不再依赖CommonServiceLocator。所以从旧有代码升级的项目,会遇到一个兼容性的问题。

那么如何修复这个问题呢?从MvvmLight的源码来看,在.NET Standard分支上,SimpleIoc这个类已经不再继承IServiceLocator接口。也不再通过
ServiceLocator.Current.GetInstance<MainViewModel>();
来获取对象的实例,而是直接通过
SimpleIoc.Default.GetInstance<MainViewModel>();
来实现相同的功能。所以我们只要简单的删除报错的这句:
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
同时将之前使用ServiceLocator的代码修改如下即可:
public MainViewModel Main
{
get
{
return SimpleIoc.Default.GetInstance<MainViewModel>();
}
}
我们再来说下VSIX packages的问题,从Github页面的issue来看,作者提交过VS2019的版本,可能因为VS2019版本更新频繁,和最新版发生冲突又被下架了。相信作者后续会再更新上去,毕竟issue里有那么多人在不停的问这个事情。
其实VSIX也不是必须的,我通常都是通过Nuget添加MvvmLight的引用,而不是使用VSIX,所以这个问题影响不大。
最后总结一下MvvmLight在2020年的推荐使用方式:
- 使用MvvmLightStd10在WPF(.NET Framework)工程
- 使用MvvmLightLibsStd10在WPF(.NET Core)和UWP 工程。
- 可以保存生成好的ViewModelLocator等文件,拷贝到WPF(.NET Core)和UWP工程中使用。
之前的篇章在介绍MvvmLight时并没有在Github上创建sameple project。这次一并补上:
https://github.com/manupstairs/MvvmLightSample
后续会把这个系列补完,绝不太监……
MvvmLight框架使用入门(5)的更多相关文章
- MvvmLight框架使用入门(四)
本篇我们着重介绍ViewModelBase,演示Set和RaisePropertyChanged方法的使用,以及就Cleanup方法释放资源展开讨论. ICleanup 接口.实现该接口的ViewMo ...
- MvvmLight框架使用入门(三)
本篇是MvvmLight框架使用入门的第三篇.从本篇开始,所有代码将通过Windows 10的Universal App来演示.我们将创建一个Universal App并应用MvvmLight框架. ...
- MvvmLight框架使用入门(一)
MvvmLight是比较流行的MVVM框架,相对较为简单易用.可能正因为简单,对应的帮助文档不多,对初学者就不够友好了.这里会用几篇随笔,就个人对MvvmLight的使用经验,来做一个入门的介绍. 第 ...
- MvvmLight框架使用入门(二)
上一篇我们简单对MvvmLight做了介绍.罗列了三个DLL中,各个命名空间下主要类的定义及大致作用.因为只是范范的概论,对于从未接触过MvvmLight的萌新来说,根本就是在晃点他们.不过万事开头难 ...
- MVVMlight框架应用:Data Binding、Command
常用Wpf开发中我们在ViewModel中实现INotifyPropertyChanged接口,通过触发PropertyChanged事件达到通知UI更改的目的:在MVVMLight框架里,这里我们定 ...
- Springmvc整合tiles框架简单入门示例(maven)
Springmvc整合tiles框架简单入门示例(maven) 本教程基于Springmvc,spring mvc和maven怎么弄就不具体说了,这边就只简单说tiles框架的整合. 先贴上源码(免积 ...
- OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据
OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据 我们这片博文就来聊聊这个反响很不错的OkHttp了,标题是我恶搞的,本篇将着重详细的 ...
- Spring.NET依赖注入框架学习--入门
Spring.NET依赖注入框架学习--入门 在学些Spring.net框架之前,有必要先脑补一点知识,比如什么是依赖注入?IOC又是什么?控制反转又是什么意思?它们与Spring.net又有什么关系 ...
- 通过Nuget添加Mvvmlight框架发生错误
IDE:Visual Studio 2013 场景:通过Nuget添加Mvvmlight框架 具体错误: 解决办法:删除Nuget,然后添加新版本的Nuget Package Manager 具体操作 ...
随机推荐
- C#LeetCode刷题之#268-缺失数字(Missing Number)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4056 访问. 给定一个包含 0, 1, 2, ..., n 中 ...
- SOAR安全能力编排化
安全能力编排化(Security Capability Orchestration)是指系统一方面可以通过自底向上地通过安全设施接口化和安全接口应用化实现安全应用编排化:另一方面则自顶向下地将安全运营 ...
- 如何使用screen命令
大家好,我是良许. 很多时候,我们都需要执行一些需要很长时间的任务.如果这时候,你的网络连接突然断开了,那么你之前所做的所有工作可能都会丢失,所做的工作可能都要重做一遍,这会浪费我们许多的时间,非常影 ...
- 很挫的 SHFileOperation 用法 2011-07-18 11:42
今天编写一个局域网文件拷贝的demo .其中有一个 SHFileOperation 的用法,这个函数有个参数SHFILEOPSTRUCT.查看msdn有如下解释: pFromAddress of a ...
- three.js UV映射简述
今天郭先生来说一说uv映射,什么是uv映射?uv映射就是将二维的贴图映射到对象的一个面(或者多个面)上.说到这个问题,我们就不得不了解一下Geometry的点.面和uv的结构.我们以BoxGeomet ...
- N46期第一周作业
1.解释drwx rwx rwx中每个字符表⽰什么? d : 表示目录文件 ①rwx表示UID的读写执行权限 ②rwx表示GID的读写执行权限 ③rwx表示other的读写执行权限 2.li ...
- JVM对象分配
1.JVM中执行字节码new指令时: 1.1.分配内存 分配策略有两种方式:(1)指针碰撞 当JVM内存区域是连续的规整的,所有用过的内存都放在一边,空闲的内存都放在另外一边,中间放着 指针作为分界点 ...
- linux驱动之内核多线程(一)
本文摘自http://www.cnblogs.com/zhuyp1015/archive/2012/06/11/2545624.html Linux内核可以看作一个服务进程(管理软硬件资源,响应用户进 ...
- HYSBZ - 2243 树链剖分 + 线段树 处理树上颜色段数
用线段树处理颜色段数 记录区间内的颜色段数,区间右端点的颜色,区间右端点的颜色. int tr[maxn<<2], lc[maxn<<2], rc[maxn<<2] ...
- [HDU6793] Tokitsukaze and Colorful Tree
题目 又是一个条历新年,窗前的灼之花又盛开了. 时隔多年,现在只有这一棵树上盛开着残存的 \(n\) 朵灼之花了. 尽管如此,这些灼之 花仍散发出不同色彩的微弱的光芒. 灼之花的生命极为短暂,但它的花 ...