Avalonia、MAUI和WPF的MVVM框架怎么选?愁死人!

一、XAML怎么还没死

真没死!而且我认为它是目前投资最少且比较靠谱的跨平台解决方案。况且,还有WPF在制造和工控领域占领着大量市场。

Avalonia继承了WPF,将XAML桌面应用,从Windows扩大到了Linux和MacOS,且已经支持Android、IOS和Web。它和Flutter一样,基于Skia渲染引擎,目前还增加了Vulkan渲染后端,通过自绘来渲染UI,能够保持UI跨平台的一致性。它还增加了许多WPF所没有的XAML特性,列如更加易用的样式和绑定,更重大的是,它在桌面端的表现,比Flutter更加成熟和稳定。

MAUI则继承自Xamarin,且将跨平台从Android和IOS,扩大到了Windows和MacOS桌面(缺Linux)。它的原理和ReactNative一样,通过与原生控件的映射来实现跨端,理论上可以达到原生性能,且原生混编也比较简单。同时它还和electron一样,支持将Blazor等Web应用嵌入到App或桌面应用。严格来说,它像Tauri,使用原生平台自带的WebView。更准确的说,它超过了以上两者,由于它不仅同时支持桌面和移动,而且MAUI原生控件和Web可以混合使用,如果使用Blazor,甚至可以直接在razor文件中调用原生API,且性能没有损失,由于这些C#代码在本机执行。

听我这么一说,你有没有心动?跳坑之前,你还是要清楚它俩目前的问题。列如Avalonia对移动端的支持还不够成熟,而且它后面的团队比较小,目前只能聚焦于UI,对原生API的支持完全基于.NET,可以用Maui.Essential,但目前对接还不是很好。而MAUI的问题,来自它的映射原理,之前只能基于所有平台的共性,目前多了平台特性功能,但这也增加了复杂性。再就是,原生平台的变化也是贼快,不好跟呀。它早期发布时比较赶,导致许多Bug,且升级后又一堆回归Bug,所以风评有些差。哦,对了,它还不支持Linux。实则,它基于WebView的技术路线是可以实现跨Linux的,但团队似乎没啥兴趣。

二、MVVM框架怎么选

关于MVVM是不是现代前端框架的鼻祖,有兴趣的可以到网上考一下古,我认为是。

在XAML技术栈中,目前的MVVM框架大致有三个选择,CommunityToolkitMvvm、Prism、ReactiveUI,恰好这三个我都有幸有过,或浅尝、或深入,可以大致比较一下,给一点选择提议。

1、CommunityToolkitMvvm

应该算是微软官方出品,定位为轻量级的MVVM框架,实现了响应式属性、响应式命令、属性监视和通知、事件通知和订阅、属性验证、依赖注入、源生成器(极大简化响应式属性和命令的书写)。源生成器,尤其值得一说,刚出来时,带来极大爽感,ViewModel一下子清爽许多,所后来面ReactiveUI和Prism都相继学去。

[ObservableProperty]
private string? name;

[RelayCommand]
private void GreetUser()
{
    ...
}

2、ReactiveUI

老牌的MVVM框架,也是Avalonia官方首推。实现的功能超级多,CommunityToolkitMvvm有的它都有,此外还有WhenAny(重磅,Vue的watch大升级)、PropertyHelper(Vue的计算属性)、数据持久化、InterAction(类似消息)、路由(额?!功能简陋、使用复杂)……功能实在太多了,这也增加了它的复杂性,国内使用的比较少,相关的学习分享资料很少见。话说回来,它的WhenAny,超级香,把响应式数据的功能发挥的淋漓尽致,框架的名字取得好,Reactive!

this.WhenAnyValue(x => x.SearchQuery)
    .Throttle(TimeSpan.FromSeconds(0.8), RxApp.TaskpoolScheduler)
    .Select(query => query?.Trim())
    .DistinctUntilChanged()
    .Where(query => !string.IsNullOrWhiteSpace(query))
    .ObserveOn(RxApp.MainThreadScheduler)
    .InvokeCommand(ExecuteSearch);

3、Prism

更像是CommunityToolkitMvvm的加强版,在Toolkit的基础上,增加了导航(区域)、模块化和对话框功能。尤其要说一下导航,如果只是简单的应用,通过视图发现或注入,就可以实现,但对于中大型应用,如果没有一套完整的路由导航系统,那会超级麻烦。Prism不但实现了完整的路由导航功能,而且使用简单,和现代前端框架的路由系统很像,注册路由页面>定义路由出口>执行导航,明清楚白三步走。

另外,需要说明的是,目前Prism的授权分两条线,一个是商业授权,另外一个是受限的免费授权(限年收入少于100万美元)。个别功能限商业版使有,列如源生成器、跨平台的Essential等等。再就是,Prism官方没有提供Avalonia的直接支持,目前由社区提供,不过社区fork的这个版本,暂时是MIT协议。

//第一步
<Grid>
    <ContentControl prism:RegionManager.RegionName="LoginContentRegion"/>
</Grid>
//第二步
containerRegistry.RegisterForNavigation<LoginMainContent>();
//第三步
_regionManager.RequestNavigate("LoginContentRegion", "LoginMainContent");

三、我心目中最好的MVVM

CommunityToolkitMvvm+Prism的导航+ReactiveUI的WhenAny,是最理想的选择。但是,编程的世界没有银弹呀。我的现实选择?是Prism,由于它的导航够硬,源生成器可以没有(由于field关键字要来了)、WhenAny可以不香,但路由导航必定要好用。

Avalonia、MAUI和WPF的MVVM框架怎么选?愁死人!

© 版权声明

相关文章

2025 年的 AIGC 浪潮,你赶上了吗?AIGC 技术正以摧枯拉朽之势,重塑各行各业的格局,从内容创作到电商营销,从影视娱乐到智能教育,到处都有它的身影。据权威数据预测,2025 年 AIGC 市场规模将突破万亿,可人才缺口却高达 200 万 +,这意味着什么?这意味着机遇,一个让你逆袭的绝佳机遇!而拿下 AIGC 应用工程师证书,就是抓住这个机遇的关键。【权威认证,行业硬通货】我们考的这个 AIGC 应用工程师证书,由工信部教育与考试中心颁发。工信部的权威性不言而喻,这张证书就是你踏入 AIGC 行业的 “金字招牌”。它是企业招聘 AIGC 岗位的重要筛选标准,在腾讯、字节跳动等大厂,以及众多中小科技企业中,都有着极高的认可度。有了它,你在求职时就能脱颖而出,获得优先录用的机会。【薪资诱人,职业发展无忧】薪资方面,AIGC 应用工程师简直不要太香。初级工程师月薪轻松 1.5 万 – 3 万,随着经验积累和技能提升,资深专家年薪 60 万 – 150 万都不在话下,甚至大模型训练工程师年薪超 200 万。而且职业发展路径十分清晰,从初级工程师起步,逐步晋升为 AIGC 产品经理、技术总监,或者转型成为自由职业者,承接高收益项目,未来晋升空间巨大。【报考条件亲民,零基础可学】很多宝子担心自己基础不够,不敢报考。别慌!中级证书报考条件超宽松,大专学历有 1 年工作经验,或者本科应届生,专业不限都能报考;高级证书要求本科学历 + 2 年 AIGC 相关经验,或者硕士学历。就算你是零基础小白,只要对 AIGC 感兴趣,愿意学习,都有机会拿下这张证书,开启高薪职业之路。【学习内容丰富,紧跟行业前沿】学习内容涵盖了当下最热门、最实用的 AIGC 技术。你将系统学习大模型原理,掌握 Stable Diffusion、Midjourney、GPT – 5 等主流工具链的使用技巧,学会进行大模型微调(LoRA、P – Tuning)、提示词工程优化,了解多模态生成技术以及 AI 版权合规审查等重要知识。这些技能都是企业急需的,学完就能直接应用到工作中。【报考流程简单,拿证快人一步】报考流程也很简单。首先,通过工x部教考中心官网核验,选择正规的授权机构提交报名材料,包括身份证、学历证明、2 寸蓝底照等。然后,开通线上课程,开启系统学习之旅,完成培训并取得合格证明。每年 3 月、6 月、9 月、12 月参加机考,考试时间 120 分钟,线上或线下形式都有。考后 15 天就能查成绩,60 分合格,45 天左右就能拿到官网可查的证书,快人一步踏入 AIGC 高薪赛道。不管你是技术转型者,想从传统编程领域转向 AIGC 工程化方向;还是创意从业者,如设计师、文案策划,希望借助 AI 提升创作效率;亦或是企业管理者,想布局 AIGC 战略,为企业赋能;甚至是大学生,想在毕业时增加就业竞争力,这个证书都非常适合你。别再犹豫了,抓住这波 AIGC 的风口,考下 AIGC 应用工程师证书,让自己的职业发展更上一层楼。#AIGC #考证 #高

4 条评论

  • 头像
    乐途 读者

    CommunityToolkitMvvm。这些功能足够了。

    无记录
    回复
  • 头像
    湯 读者

    主要是导航,视图发现或者注入还是很麻烦

    无记录
    回复
  • 头像
    闪耀暖暖创作阁 投稿者

    不同场景不一样,工控类还得是Avalonia

    无记录
    回复
  • 头像
    Z小王Z 投稿者

    收藏了,感谢分享

    无记录
    回复