【杂谈】“CommunityToolkit.Mvvm无法自动生成Get/Set属性对”的解决方案
创始人
2024-06-03 14:56:57
0

最近在实践MVVM,发现这玩意儿挺有意思的,有点WPF的最佳搭档的感觉。UI自动跟随VM变化,极大程度上简化各类逻辑。UI元素的各种属性也会实时反馈到VM上,直接在VM处理事务逻辑即可。

但是MVVM在WPF上应用,最烦的就是要自己写一大堆Get/Set,以及匹配INotifyPropertyChanged的调用。虽然Visual Studio里有对应的code snippet:propfull来完成快速完成这个事情,但是仍然要手动补全OnPropertyChanged()的调用,而且也要打很多字,十分不方便。

在这里插入图片描述
然后嘛,这种事情肯定早就有人造了轮子解决了。网上一搜,CommunityToolkit.Mvvm映入眼帘。MIT协议,微软官方背书,而且实现也很完美。Field上加个Attribute就完事儿了,后台自动生成对应的get/set+OnPropetyChanged的调用代码。
在这里插入图片描述

详见:
https://learn.microsoft.com/en-us/dotnet/communitytoolkit/mvvm/generators/observableproperty

按照上面说的,直接进行一个Nuget Package的安装,使用8.0以上版本即可享受到这个自动的待遇。

但是…… 装完好像有问题啊,这代码也没有自动生成啊(.Net Framework, Console项目),后面观察到网上的例子大部分都是高级版本的.NET或者是WPF应用程序项目,怎么,Console不能Mvvm了?
在这里插入图片描述
经过一番调查研究嘛,这个玩意儿的原理是Analyzer,它会类似于代码检查,当发现代码中包含这种带特别Attribute的满足某些条件(这里的条件是 1- 继承自ObservableObject,2- 标记为partial,3- Field被标记有ObservableProperty属性,当然有其他条件,可以查看这个Attribute的说明),则会自动生成 getter 和 setter。
所以嘛,找到项目,添加Analyzer。具体Analyzer的位置就在你的项目的sln文件的同级目录下的packages文件夹的CommunityToolkit.Mvvm...文件夹,具体位置如下

在这里插入图片描述
在这里插入图片描述
然后,似乎还是不太行嘛,但是这次Visual Studio给了个提示

在这里插入图片描述
原来是需要C# 8.0。那么好的,语言版本一改,重新加载项目,无敌起飞。

在这里插入图片描述
很好奇它自动生成的代码是什么的朋友们,可以直接F12点进去看看,这里就不展示了。

这样就完美解决了Mvvm在某些项目中,无法自动生成 getter/setter 的问题。

相关内容

热门资讯

修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
【前端】‘??‘与‘||‘有什... 0 问题 经常写const data = res.data.a ?? ''或者const d...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
牛客计算器的改良(Python... 文章目录1.题目描述2.输入描述:3.输出描述:4.示例15.分析6.代码7.结语 链接࿱...
正大杯|市调大赛|2023备赛... 关键信息 同时随着精细化养宠趋势的深入,宠物消费类目日渐丰富。 本报告通过 Niuco...
QGIS下载在线地图(Goog... 前言 国内外有很多在线地图下载软件,但功能单一,基本上只能下载数据&#x...