news 2026/8/6 5:24:53

WPF中的CommunityToolkit.Mvvm框架

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
WPF中的CommunityToolkit.Mvvm框架

1。概念,安装,使用(重要API:ObservableObject,RelayCommand|RelayCommand<T>), 封装视图模型定位器
2。IOC控制反转和DI依赖注入(IServiceProvider,ServiceCollection,模块包:Microsoft.Extensions.DependencyInjection),
3。源生成器([ObservableProperty],[RelayCommand],[INotifyPropertyChanged])只支持.net core
4。命令详解(异步命令:AsyncRelayCommand 和 AsyncRelayCommand<T>)


自动依赖注入服务
5。信使(IMessenger,WeakReferenceMessenger、StrongReferenceMessenger等)

Community社区 Toolkit工具包

使用源生器有个前提:只能部分类 parital class

封装好自动依赖注入服务框架之后:
1。先添加视图
2。再添加视图模型
3。修改视图模型定位器,添加属性
4。绑定上下文,<Window DataContext="Binding Source={StaticResource Locator}, Path=Main}"

CommunityToolkit.Mvvm参考:
https://learn.microsoft.com/zh-cn/dotnet/communitytoolkit/mvvm/
https://github.com/CommunityToolkit
https://www.cnblogs.com/7bao3shu/articles/19420516
https://www.cnblogs.com/cdaniu/p/16848821.html
https://blog.csdn.net/JetRaven12/article/details/156069254

视图模型定位器的封装:
https://blog.csdn.net/u010975589/article/details/155889321

向IOC容器中添加服务的三种方式:Scoped,Transient,Singleton
https://blog.csdn.net/u013400314/article/details/141598587

自动依赖注入服务:
https://blog.csdn.net/u010975589/article/details/155889321

1。什么是CommunityToolkit.Mvvm框架?
CommunityToolkit.Mvvm 包(又名 MVVM 工具包,以前称为 Microsoft.Toolkit.Mvvm)是一个现代、快速和模块化的 MVVM 库。
可以当成MvvmLight的替代品,大部分的API和MvvmLight类似,而MvvmLight不再更新了。而CommunityToolkit.Mvvm是微软官方推荐的MVVM工具包。

2。CommunityToolkit.Mvvm框架中的重要对象?
ObservableObject可以让VM中的数据支持双向通知,
RelayCommand,AsyncRelayCommand,这两个对象可以给控件绑定命令,异步命令
IServiceProvider,ServiceCollection,这两个对象可以当成IOC容器,需要模块包:Microsoft.Extensions.DependencyInjection
IMessenger,WeakReferenceMessenger、StrongReferenceMessenger等,这些对象让框架支持消息通讯

了解的对象:
ObservableRecipient===》MvvmLight中的ViewModelBase
ObservableValidator
IRelayCommand
IRelayCommand<T>
IAsyncRelayCommand
IAsyncRelayCommand<T>

3。CommunityToolkit.Mvvm使用步骤?
参考课件
a. 安装CommunityToolkit.Mvvm包,为了支持IOC还需要安装:Microsoft.Extensions.DependencyInjection
b.规划项目,Models,Views,ViewModels
c.编写代码使用,注意重要对象

4。源生器是什么?使用要求?怎么使用?
源生成器:它就是属性和命令的语法糖,让开发者在编写视图模型中的属性和命令时语法更简洁,将来会把简洁语法再通过编译器转换成要运行的代码。
语法简洁是靠C#的特性来实现。

使用要求:
a. 必须在部分类中使用,原因:源生器会再编译,编译的时候会把开发者定义的部分类,合并到一个大的VM中。
b. 源生器靠C#中的特性来实现。[ObservableProperty],[RelayCommand],[INotifyPropertyChanged]
c. 源生器仅支持.net Core平台。

从版本 8.0 开始,MVVM 工具包包含全新的 Roslyn 源生成器,有助于在使用 MVVM 体系结构编写代码时大幅减少样本。
说明源生成器支持.net core,不支持.net framework。

怎么使用:
参考课件

5。信使?
MVVM 工具包提供两种现用的实现:WeakReferenceMessenger 和 StrongReferenceMessenger:前者在内部使用弱引用,为收件人提供自动内存管理,而后者使用强引用,并要求开发人员在不再需要收件人时手动取消订阅收件人(有关如何注销消息处理程序的更多详细信息,可在下面找到),但这一点换来的是提供更好的性能,而且内存使用量要少得多

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/6 5:24:04

Unity TextMeshPro中文显示解决方案:动态字体图集配置与优化

1. 项目概述&#xff1a;当TextMeshPro遇上中文&#xff0c;一场“方块”引发的血案如果你正在用Unity开发一款面向国内市场的游戏或者应用&#xff0c;那么TextMeshPro&#xff08;简称TMP&#xff09;这个强大的文本渲染插件&#xff0c;大概率是你UI系统的核心组件。它带来的…

作者头像 李华
网站建设 2026/8/6 5:22:13

郑州专业的网站建设公司如何通过差异化服务打破同质化僵局并赋能企业数字化转型的深层思考

在当下的商业环境中,互联网已经不仅仅是一个展示窗口,而是企业生存和发展的生命线。对于身处中原腹地、工业基础雄厚且正在经历数字化转型浪潮的郑州而言,每一家试图在激烈市场竞争中突围的企业,都面临着同样的困境:如何在海量的信息中脱颖而出?如何让用户在短短几秒内信…

作者头像 李华
网站建设 2026/8/6 5:22:13

Unity高性能视频解码插件ViveMediaDecoder:原理、集成与优化实战

1. 项目概述&#xff1a;为什么我们需要一个专门的视频解码插件&#xff1f;如果你在Unity里做过视频播放相关的功能&#xff0c;大概率遇到过这样的场景&#xff1a;项目里需要播放一个MP4或者H.265编码的视频&#xff0c;你兴冲冲地拖了个Video Player组件&#xff0c;结果要…

作者头像 李华
网站建设 2026/8/6 5:19:31

C++/CLI混合编程:连接原生C++与.NET生态的桥梁技术

1. 项目概述&#xff1a;为什么我们需要C/CLI&#xff1f;如果你是一个长期在Windows平台上用C做开发的工程师&#xff0c;最近几年可能会遇到一个绕不开的难题&#xff1a;如何让那些用了几十年的、性能强悍但“脾气古怪”的C遗留代码&#xff0c;与现代的、优雅的.NET世界&am…

作者头像 李华
网站建设 2026/8/6 5:17:19

物流跟踪网站建设指南:如何打造高效透明化的供应链可视化平台

在如今这个电商爆发、供应链日益复杂的时代,物流已经不再是简单的“把东西从A地送到B地”那样简单粗暴的过程了。作为卖家、作为货主,甚至作为普通消费者,我们都在渴望一种确定性。这种确定性来自于“我的货到哪了?”“预计什么时候到?”“如果延误了怎么办?”。这些看似…

作者头像 李华