CommunityToolkit.Mvvm学习笔记(1)——概述
先简单谈谈为什么选择学习使用这个MVVM框架。接触.NET和WPF有一阵子了,用过WPF的应该都听说过MVVM模式,它是一种分离前后端、松耦合的模式。某种程度上来说是MVC和MVP的升级版,也一定程度上解决了前两者存在的一些问题。因为是模式,所以不仅限于WPF这一种开发,许多涉及UI的开发都会用到它,比如Vue。既然它这么优秀,我自然想使用它。但由于我接触.NET和WPF时间都不长,很多基础知识掌
一、前言
先简单谈谈为什么选择学习使用这个MVVM框架。
接触.NET和WPF有一阵子了,用过WPF的应该都听说过MVVM模式,它是一种分离前后端、松耦合的模式。某种程度上来说是MVC和MVP的升级版,也一定程度上解决了前两者存在的一些问题。因为是模式,所以不仅限于WPF这一种开发,许多涉及UI的开发都会用到它,比如Vue。
既然它这么优秀,我自然想使用它。但由于我接触.NET和WPF时间都不长,很多基础知识掌握不好,所以我决定先使用原生的MVVM,即不用任何框架,自己先徒手实现试试。这样做或许比较费力,最终做出来的东西结构设计上也不完美,但对于整个过程和实现中的一些难点上的体会会更深,在后续使用框架开发时候应该会有一些额外收获。
确实,第一个项目做出来了,有点不伦不类,就自己硬建了几个文件夹View、Model、ViewModel,然后开始套模式,开始绑定变量,开始绑定命令。就是在绑定命令这一步上,让我觉得WPF在原生的MVVM上支持太复杂了,因为你需要自己重写有关ICommand的一切。而反观几种主流的MVVM框架(MvvmLight、Prism等)在命令的使用上都非常简洁。于是,我的第二个WPF项目也决定使用框架。
使用框架,必然少不了选择框架。起初打算用Prism,因为相对来说,它功能最强大,支持最好。于是从NuGet下载添加进项目,然后准备开始学习,翻了翻博客,翻了翻GitHub,感觉它的学习方式主要是零零散散的博客&GitHub上的样例,说实话,不太系统(主要是我太菜,看样例太累)。于是转MvvmLight,网上都说这个框架比较轻量级,且简单易上手。确实,我搜Mvvm的时候,它出来的词条最多。于是从NuGet搜了下,好家伙!
似乎几年前就停更了,当然想用它,还是一点问题都没有的。但紧接着,一行小字吸引了我。
这是它的替代品么?怀着好奇,我点了进去。它是一个微软官方提供支持的Mvvm包,而且有着详细的文档,被称为MvvmLight的继承者。在这机缘巧合之下,我选择了它,当然好不好用还不知道,先用用看,不好用再换。总结一下,我选它是因为微软官方的 + 文档详细 + 新。
二、MVVM Toolkit概述
首先,放一下它的文档链接,喜欢啃文档的自己去看。
Microsoft.Toolkit.Mvvm包(也称MVVM Toolkit)是一个现代、快速且模块化的MVVM库。它是Windows社区工具包的一部分并且围绕着以下几点原则构建的:
- 平台和运行时库相独立 - .NET 2.0标准和.NET 5(与UI框架无关)
- 简单易用 - 在程序结构和编码范式上没有严格要求,即使用灵活
- 自由组件 - 自由选择要使用的组件
- 参考实现 - 精炼且性能好,提供了基础库的接口实现,但缺乏直接使用它们的具体类型
这个包针对是.NET标准的,所以它能应用于任何平台:UWP,WinForms,WPF,Xamarin,Uno等;以及任何运行环境下:.NET Native, .NET Core, .NET Framework, or Mono。它能在它们之上运行。且API在所有情况下都是相同的,这使得它非常适合构建共享库。
此外,MVVM工具包还有专门针对.NET 5的优化点,使得在.NET 5运行时会有更多内部优化。当然,两种情况下的API是相同的,NuGet总是会解析出包的最佳版本,而不需要用户担心API在平台上是否可用。
在VS当中安装包:
- 在解决方案管理器中,右击工程,然后选择管理NuGet包。搜索Microsoft.Toolkit.Mvvm并安装它。
- 添加一个using指令来使用API:
using Microsoft.Toolkit.Mvvm;
- 代码示例可以在MVVM Toolkit的其他文档页面和项目的单元测试中找到
2.1. 何时使用MVVM工具包
使用该包可以访问一组标准的、独立的、轻量级的类型,这些类型为使用MVVM模式的程序提供了起始实现。通常,这些类型本身就足以满足用户的需求,而不需要额外的外部引用。
包括的类型有:
- Microsoft.Toolkit.Mvvm.ComponentModel
- ObservableObject
- ObservableRecipient
- ObservableValidator
- Microsoft.Toolkit.Mvvm.DependencyInjection
- Ioc
- Microsoft.Toolkit.Mvvm.Input
- RelayCommand
- RelayCommand<T>
- AsyncRelayCommand
- AsyncRelayCommand<T>
- IRelayCommand
- IRelayCommand<in T>
- IAsyncRelayCommand
- IAsyncRelayCommand<in T>
- Microsoft.Toolkit.Mvvm.Messaging
- IMessanger
- WeakReferenceMessenger
- StrongReferenceMessenger
- IRecipient<TMessage>
- MessageHandler<TRecipient, TMessage>
- Microsoft.Toolkit.Mvvm.Messaging.Messages
- PropertyChangedMessage<T>
- RequestMessage<T>
- AsyncRequestMessage<T>
- CollectionRequestMessage<T>
- AsyncCollectionRequestMessage<T>
- ValueChangedMessage<T>
这个包旨在提供更多的灵活性,使得开发者能自由选择使用哪些组件。所有的类型都是松耦合的(loosely-coupled),因此只需要包含你需要用到的。当使用它们来构建程序时,没有必要完全使用特定的API,也没有一套强制性的模式要遵循。
这节的内容和标题好像没有太强烈的关系,不过硬理解一下就是如果你的程序要用Mvvm模式,你可以用这个包。且包中的众多类型你用得着的就用,用不着的就不用。
2.2. 更多资源
三、小结
这节主要是大概讲讲MVVM Toolkit是什么以及如何加入到项目中。接下来开始正式学习。
更多推荐
所有评论(0)