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:前者在内部使用弱引用,为收件人提供自动内存管理,而后者使用强引用,并要求开发人员在不再需要收件人时手动取消订阅收件人(有关如何注销消息处理程序的更多详细信息,可在下面找到),但这一点换来的是提供更好的性能,而且内存使用量要少得多

相关推荐
一条闲鱼_mytube2 天前
高并发短链接系统设计
wpf
一个天蝎座 白勺 程序猿3 天前
IoTDB集群扩容:从慌乱到从容的经验分享
数据库·wpf·时序数据库·iotdb
samble3 天前
从零搭建灌装监控系统(十三):报警系统设计,生命周期与通知
c#·wpf·mvvm·modbus·工业控制
samble4 天前
从零搭建灌装监控系统(十二):配置系统,原子写入与容错
c#·wpf·mvvm·modbus·工业控制
蜗牛互联网7 天前
OLMo-core 3的token gerrymandering提醒:MoE路由要按时间窗验收
java·人工智能·wpf
LateFrames7 天前
WPF 升级选型:用 .NET 8 还是 .NET 10
.net·wpf·.net8·.net10
samble7 天前
从零搭建灌装监控系统(十):生产追溯,条码触发自动记录
c#·wpf·mvvm·modbus·工业控制
SamChan909 天前
PDF页面旋转与CropBox陷阱:译文回填位置总是错位的根因实测
python·ai·pdf·wpf
SamChan9010 天前
PDF翻译时页眉页脚总在捣乱?跨页重复文本块的检测与过滤实测
人工智能·python·ai·pdf·wpf
samble18 天前
从零搭建灌装监控系统(四):深色主题与样式系统,ResourceDictionary 统一管理
c#·wpf·mvvm·样式·工业控制