0

0

MAUI Community Toolkit怎么用 MVVM库使用指南

煙雲

煙雲

发布时间:2025-12-18 13:01:02

|

373人浏览过

|

来源于php中文网

原创

maui中用communitytoolkit.mvvm实现mvvm只需三点:装对包(communitytoolkit.mvvm 8.2.2+)、写对类(partial+observableobject+observableproperty/relaycommand特性)、绑对datacontext(服务注入或页面级设置)。

maui community toolkit怎么用 mvvm库使用指南

MAUI 中用 CommunityToolkit.Mvvm 做 MVVM 开发,核心就三点:装对包、写对类、绑对 DataContext。它不是“配置一堆东西才能跑”,而是加个特性、继承一个基类,编译时自动生成通知和命令代码,轻量又高效。

安装 CommunityToolkit.Mvvm 包

必须用 NuGet 安装最新稳定版(如 8.2.2),不要用已废弃的 Microsoft.Toolkit.Mvvm

  • 在 MAUI 项目(.csproj)里添加:
  • 确保启用 C# 11 源生成器支持,在项目文件中加入:
    11.0
  • 不用手动引用其他依赖,也不用改 TargetFramework —— 它自动适配 .NET 6/7/8 和 MAUI 运行时

定义 ViewModel 类

ViewModel 必须是 partial 类,继承 ObservableObject,再用特性标记字段即可。

考拉新媒体导航
考拉新媒体导航

考拉新媒体导航——新媒体人的专属门户网站

下载
  • [ObservableProperty] 标记私有字段,自动生成带通知的 public 属性
    例如:[ObservableProperty] private string _title = "首页"; → 自动生成 Title 属性并触发 PropertyChanged
  • [RelayCommand] 标记方法,自动生成 ICommand 字段和执行逻辑
    例如:[RelayCommand] private void Save() { ... } → 自动生成 SaveCommand 属性
  • 异步命令直接用 [RelayCommand] + async Task 方法,会生成 IAsyncRelayCommand
  • 不需要手写 INotifyPropertyChangedSetPropertynew RelayCommand(...) 等模板代码

在 MAUI 页面中绑定 ViewModel

MAUI 不像 WPF 那样默认支持全局资源字典,推荐两种主流方式:

  • 页面级绑定:在 MainPage.xaml.cs 构造函数中设置:
    BindingContext = new MainViewModel();
  • 服务注入式绑定(更推荐):
    MauiProgram.cs 注册:
    builder.Services.AddSingletonainViewModel>();
    然后在页面后台或 XAML 中解析:
    BindingContext = serviceProvider.GetService<mainviewmodel>();</mainviewmodel>
  • XAML 中使用:
    <label text="{Binding Title}"></label>
    <button command="{Binding SaveCommand}"></button>

进阶但实用的功能点

几个高频但容易忽略的细节:

  • 命令可执行控制:加 CanExecute 参数,比如 [RelayCommand(CanExecute = nameof(CanSave))],对应写一个返回 bool 的方法
  • 消息通信:用 WeakReferenceMessenger 替代传统事件,避免内存泄漏,无需手动解订阅
  • 验证与状态:配合 ObservableValidator 可快速实现属性级数据验证(如非空、长度限制)
  • 调试技巧:编译后可在 obj/Debug/net8.0/generated/ 下查看源生成器实际产出的代码,方便理解底层逻辑

基本上就这些。不复杂,但容易忽略 partialLangVersion 这两个关键点。装完包、写好类、设好 BindingContext,就能立刻响应数据变化和按钮点击了。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

770

2023.08.02

javascriptvoid(o)怎么解决
javascriptvoid(o)怎么解决

javascriptvoid(o)的解决办法:1、检查语法错误;2、确保正确的执行环境;3、检查其他代码的冲突;4、使用事件委托;5、使用其他绑定方式;6、检查外部资源等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

183

2023.11.23

java中void的含义
java中void的含义

本专题整合了Java中void的相关内容,阅读专题下面的文章了解更多详细内容。

115

2025.11.27

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

419

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

594

2023.08.10

vsd文件打开方法
vsd文件打开方法

vsd文件打开方法有使用Microsoft Visio软件、使用Microsoft Visio查看器、转换为其他格式等。想了解更多vsd文件相关内容,可以阅读本专题下面的文章。

501

2023.10.30

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

561

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

165

2026.02.13

Flutter跨平台开发与状态管理实战
Flutter跨平台开发与状态管理实战

本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

90

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号