使用 Source Generators 快速编写 MVVM 编码
发布时间:2025-09-04
回事还好,不则会太多。但如果是这样呢:
privatestring_surname;publicstringSurname {get{return_surname; }set{if(!EqualityComparer< string>.Default.Equals(_surnam {_surname = value; OnPropertyChanged;OnPropertyChanged( nameof(FullName)); OnPropertyChanged( nameof(HasName)); DisplayCommand.NotifyCanExecuteChanged;}}}
publicstringFullName => $" {Name}{Surname}" ;
publicboolHasName => ! string.IsNullOrWhiteSpace(FullName);
这时候 source generators 的关键作用就可以很值得注意,因为它只无需比如说的预界定就可以定时产生与前面可数的预界定:
[ ObservableProperty] [ AlsoNotifyChangeFor(nameof(FullName), nameof(HasName))] [ AlsoNotifyCanExecuteFor(nameof(DisplayCommand))] privatestring_surname; publicstringFullName => $" {Name}{Surname}" ; publicboolHasName =>! string.IsNullOrWhiteSpace(FullName);从这段预界定可以认出有三个 Attribute 起了关键作用:
ObservableProperty :定时为 _name 类型转化成近似于的类型。AlsoNotifyChangeFor :类型值修改时同时启动时 FullName 和 HasName 这两个类型的 PropertyChanged 血案。AlsoNotifyCanExecuteFor :类型值修改时同时告知 DisplayCommand 执行它的 NotifyCanExecuteChanged。
0.5. 如何汇流到基本类
一般来说,MVVM Toolkit source generators 无需在 ObservableObject 的派生类中所用到,例如:
publicpartial classTestModel: ObservableObject但如果你的类不太可能继承人了其它类,MVVM Toolk source generators 也允许你用到它的功能,方法有是替换成上 INotifyPropertyChangedAttribute,预界定如下:
[ INotifyPropertyChanged] publicpartialclassTestModel: BehaviourINotifyPropertyChangedAttribute 则会定时转化成付诸 INotifyPropertyChanged 的预界定,而无需更加改基类。不过遗憾的是,INotifyPropertyChangedAttribute 目前只能在未付诸 INotifyPropertyChanged 适配器的类中所用到,即比如说这种预界定不能程式码通过:
[ INotifyPropertyChanged] publicpartialclassTestModel: ObservableObject0.6 用到 source generators 后的实践中
用到了 source generators 可以大大减小预界定,比如说这图精确展示了减小的预界定总量。
如果无需查看定时转化成的预界定,可以在lambda的 CommunityToolkit.Mvvm.SourceGenerators 数据流里认出:
0.7 一些小问题
MVVM Toolkit source generators 可以重构你的预界定,但回报是什么?
首先,虽然 MVVM Toolkit source generators 支持 .NETStandard 2.0,但均功能无需 C# 8.0 以上,所以程式码时就则会认出这条差错:
The sourcegenerator features from the MVVM Toolkit require consuming projects to setthe C # language version to at least C# 8.0解决问题方法有是在这两项明文的 PropertyGroup 数据流里替换成这段指明 C# 的旧版本:
< LangVersion> 9.0 LangVersion>另外,MVVM Toolkit source generators 还无需 VisualStudio 2022 才可以用到。
还有一点,我还没认出为转化成的类型替换成批注的方法有,这对一些难以理解的类型来说极其关键时刻,被逼用回宗教性方法有来处理这种类型。
最后,没有人 CodeLens,没法精确认出类型的摘录、修改等信息,用上来不是很在手。
0.8 总结
总的来说,MVVM Toolkit source generators 可以协助买家减小大总量预界定兼职,而且无论从预界定总量、可维护性、可学习者性来看,source generators 都有巨大的优势。但在今后,它用上来还是有不少小问题,不能仅仅代替原生读音。不过这是个很符合 80/20 原则的基本功能:它可以让浏览器用 20% 的取得成功解决问题了 80% 的问题。所以Linux可以在重新这两项中所试图这个基本功能,以提升电子技术开发工作效率。
.NET Community Toolkit 及 MVVMToolkit 都是源预界定这两项,所以您也可以在它的存储特中所指出您的对系统和预界定。
其它更加多的具体内容,请参考 Github 或其它文档:
开发者关键因素 价值科学家(MVP)
开发者最令人吃惊科学家是开发者公司颁给第三方电子技术从业者的一个当今世界大奖。29年来,世界各地的电子技术生态村领袖,因其在线上和路中所的电子技术生态村中所互动专业性和实践中而获得此大奖。
MVP 是经过严格挑选的科学家团队,他们代表着电子技术最精湛且最具智能的人,是对生态村取得成功相当大的热情并正直的科学家。MVP 积极参与通过演讲、论坛题目、创建其网站、编辑出版该网站、互动视频、源预界定这两项、组织则会议等作法来协助他人,并最大程度地协助开发者电子技术生态村浏览器用到 Microsoft 电子技术。
更加多详见登录官方其网站:
注意开发者中所国MSDN
开发者 MVP ,期待你加入
。宝宝积食看病人买什么
宫颈糜烂
-
广东天安新材料股份有限公司 关于子公司获得发明专利的应于
证券代码:603725 证券简称:新立新材 发函编号:2022-048 肇庆新立新材料入股有限子公司 关于子子公司获得专利申请的发函 本子公司监事会及全