CommunityToolkit.Mvvm学习笔记(1)——概述

本文介绍了选择并使用MVVMToolkit的原因,它是一个微软官方支持的轻量级MVVM库,适用于多种.NET平台。MVVMToolkit提供了简单易用的组件,如ObservableObject、RelayCommand等,旨在简化MVVM模式的实现。文章还提供了包的安装方法和一些关键类型的概述,并强调了其灵活性和平台无关性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前言

    先简单谈谈为什么选择学习使用这个MVVM框架。
    接触.NET和WPF有一阵子了,用过WPF的应该都听说过MVVM模式,它是一种分离前后端、松耦合的模式。某种程度上来说是MVC和MVP的升级版,也一定程度上解决了前两者存在的一些问题。因为是模式,所以不仅限于WPF这一种开发,许多涉及UI的开发都会用到它,比如Vue。
    既然它这么优秀,我自然想使用它。但由于我接触.NET和WPF时间都不长,很多基础知识掌握不好,所以我决定先使用原生的MVVM,即不用任何框架,自己先徒手实现试试。这样做或许比较费力,最终做出来的东西结构设计上也不完美,但对于整个过程和实现中的一些难点上的体会会更深,在后续使用框架开发时候应该会有一些额外收获。
    确实,第一个项目做出来了,有点不伦不类,就自己硬建了几个文件夹View、Model、ViewModel,然后开始套模式,开始绑定变量,开始绑定命令。就是在绑定命令这一步上,让我觉得WPF在原生的MVVM上支持太复杂了,因为你需要自己重写有关ICommand的一切。而反观几种主流的MVVM框架(MvvmLight、Prism等)在命令的使用上都非常简洁。于是,我的第二个WPF项目也决定使用框架。
    使用框架,必然少不了选择框架。起初打算用Prism,因为相对来说,它功能最强大,支持最好。于是从NuGet下载添加进项目,然后准备开始学习,翻了翻博客,翻了翻GitHub,感觉它的学习方式主要是零零散散的博客&GitHub上的样例,说实话,不太系统(主要是我太菜,看样例太累)。于是转MvvmLight,网上都说这个框架比较轻量级,且简单易上手。确实,我搜Mvvm的时候,它出来的词条最多。于是从NuGet搜了下,好家伙!
在这里插入图片描述
似乎几年前就停更了,当然想用它,还是一点问题都没有的。但紧接着,一行小字吸引了我。
在这里插入图片描述
这是它的替代品么?怀着好奇,我点了进去。它是一个微软官方提供支持的Mvvm包,而且有着详细的文档,被称为MvvmLight的继承者。在这机缘巧合之下,我选择了它,当然好不好用还不知道,先用用看,不好用再换。总结一下,我选它是因为微软官方的 + 文档详细 +

二、MVVM Toolkit概述

    首先,放一下它的文档链接,喜欢啃文档的自己去看。
    Microsoft.Toolkit.Mvvm包(也称MVVM Toolkit)是一个现代、快速且模块化的MVVM库。它是Windows社区工具包的一部分并且围绕着以下几点原则构建的:

  • 平台和运行时库相独立 - .NET 2.0标准和.NET 5(与UI框架无关)
  • 简单易用 - 在程序结构和编码范式上没有严格要求,即使用灵活
  • 自由组件 - 自由选择要使用的组件
  • 参考实现 - 精炼且性能好,提供了基础库的接口实现,但缺乏直接使用它们的具体类型

这个包针对是.NET标准的,所以它能应用于任何平台:UWP,WinForms,WPF,Xamarin,Uno等;以及任何运行环境下:.NET Native, .NET Core, .NET Framework, or Mono。它能在它们之上运行。且API在所有情况下都是相同的,这使得它非常适合构建共享库。

    此外,MVVM工具包还有专门针对.NET 5的优化点,使得在.NET 5运行时会有更多内部优化。当然,两种情况下的API是相同的,NuGet总是会解析出包的最佳版本,而不需要用户担心API在平台上是否可用。

    在VS当中安装包:

  1. 在解决方案管理器中,右击工程,然后选择管理NuGet包。搜索Microsoft.Toolkit.Mvvm并安装它。
    在这里插入图片描述
  2. 添加一个using指令来使用API:
using Microsoft.Toolkit.Mvvm;
  1. 代码示例可以在MVVM Toolkit的其他文档页面和项目的单元测试中找到

2.1. 何时使用MVVM工具包

使用该包可以访问一组标准的、独立的、轻量级的类型,这些类型为使用MVVM模式的程序提供了起始实现。通常,这些类型本身就足以满足用户的需求,而不需要额外的外部引用。

包括的类型有:

  • Microsoft.Toolkit.Mvvm.ComponentModel
    • ObservableObject
    • ObservableRecipient
    • ObservableValidator
  • Microsoft.Toolkit.Mvvm.DependencyInjection
    • Ioc
  • Microsoft.Toolkit.Mvvm.Input
    • RelayCommand
    • RelayCommand<T>
    • AsyncRelayCommand
    • AsyncRelayCommand<T>
    • IRelayCommand
    • IRelayCommand<in T>
    • IAsyncRelayCommand
    • IAsyncRelayCommand<in T>
  • Microsoft.Toolkit.Mvvm.Messaging
    • IMessanger
    • WeakReferenceMessenger
    • StrongReferenceMessenger
    • IRecipient<TMessage>
    • MessageHandler<TRecipient, TMessage>
  • Microsoft.Toolkit.Mvvm.Messaging.Messages
    • PropertyChangedMessage<T>
    • RequestMessage<T>
    • AsyncRequestMessage<T>
    • CollectionRequestMessage<T>
    • AsyncCollectionRequestMessage<T>
    • ValueChangedMessage<T>

这个包旨在提供更多的灵活性,使得开发者能自由选择使用哪些组件。所有的类型都是松耦合的(loosely-coupled),因此只需要包含你需要用到的。当使用它们来构建程序时,没有必要完全使用特定的API,也没有一套强制性的模式要遵循。

这节的内容和标题好像没有太强烈的关系,不过硬理解一下就是如果你的程序要用Mvvm模式,你可以用这个包。且包中的众多类型你用得着的就用,用不着的就不用。

2.2. 更多资源

三、小结

这节主要是大概讲讲MVVM Toolkit是什么以及如何加入到项目中。接下来开始正式学习。

### 关于 CommunityToolkit.Mvvm 的示例与用法 #### 安装 CommunityToolkit.Mvvm 包 为了使用 `CommunityToolkit.Mvvm`,首先需要安装该 NuGet 包。可以通过 Visual Studio 或者命令行来完成此操作。 通过 Package Manager Console 执行如下命令: ```powershell Install-Package CommunityToolkit.Mvvm ``` 或者使用 .NET CLI 命令: ```bash dotnet add package CommunityToolkit.Mvvm ``` #### 创建 ViewModel 类 创建一个继承自 `ObservableObject` 的类作为视图模型[^2]: ```csharp using CommunityToolkit.Mvvm.ComponentModel; public partial class MainViewModel : ObservableObject { private string _name; public string Name { get => _name; set => SetProperty(ref _name, value); } } ``` 在这个例子中,`MainViewModel` 使用了 `SetProperty` 方法来自动生成属性更改通知事件,这是实现数据绑定的关键部分之一[^3]。 #### 绑定命令到按钮点击事件 定义一个异步方法并将其关联至 UI 控件上的动作处理程序,比如按钮的点击事件[^1]: ```csharp using CommunityToolkit.Mvvm.Input; public partial class MainViewModel : ObservableObject { // ... 上面已有的代码 ... [ICommand] private async Task GreetAsync() { await Task.Delay(1000); // 模拟耗时操作 MessageBox.Show($"Hello {Name}!"); } } ``` 此处 `[ICommand]` 特性简化了 ICommand 接口的应用过程,使得开发者无需手动实例化 RelayCommand 对象即可轻松地将 C# 方法映射成可执行命令。 #### XAML 中的数据绑定配置 最后,在对应的页面或窗口资源文件 (XAML) 中设置 DataContext 并建立双向绑定关系: ```xml <Window x:Class="YourNamespace.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" Title="MainWindow"> <Grid> <!-- 设置DataContext --> <TextBox Text="{Binding Path=Name, Mode=TwoWay}" /> <Button Content="Say Hello" Command="{Binding GreetCommand}" /> </Grid> </Window> ``` 以上就是利用 `CommunityToolkit.Mvvm` 实现基本 MVVM 构架的一个简单案例说明。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值