本教程系列演示如何使用 WinUI 3 应用中的模型View-ViewModel(MVVM)设计模式和 MVVM 工具包 实现数据绑定、依赖项注入和单元测试。 它基于 “创建 WinUI 应用 ”教程,演示如何更新视图模型以利用 MVVM 工具包和 MVVM 工具包与传统 MVVM 方法之间的差异。
可以从 GitHub 存储库下载或查看本教程的代码。
本教程中,您将学习如何:
- 了解 MVVM 工具包与传统 MVVM 方法之间的差异。
- 创建单独的类库项目来保存 ViewModel 和服务以提高可测试性。
- 使用 MVVM 工具包在 WinUI 应用中实现数据绑定。
- 添加
AllNotesViewModel和NoteViewModel视图模型以充分利用 MVVM 工具包。 - 集成依赖项注入以管理 ViewModel 和服务。
- 创建单元测试项目以测试 ViewModels 和服务。
先决条件
若要完成本教程,需要具备以下先决条件:
- 安装了 WinUI 应用程序开发工作负载的 Visual Studio 2022(版本 17.14 或更高版本)或 Visual Studio 2026。
- 按照 “创建 WinUI 应用 ”教程中的步骤创建初学者项目。 如果已熟悉本教程,可以下载代码,以便从 GitHub 存储库开始。
什么是 MVVM 工具包?
MVVM 工具包是一种新式、轻型且快速的库,可帮助你在 .NET 应用程序中实现 MVVM 设计模式。 它是 .NET 社区工具包 的一部分,提供一组工具和实用工具来简化基于 MVVM 的应用程序的开发。 MVVM 工具包包括以下功能:
-
ObservableObject:实现接口的
INotifyPropertyChanged基类,因此可以创建通知属性更改视图的视图模型。 - RelayCommand:一种命令实现类,可用于将 UI 操作绑定到视图模型中的方法。
- Messenger:一种消息传递系统,用于在应用程序的不同部分之间实现通信,而无需紧密耦合。
- 属性:一组可用于生成样板代码的属性,例如属性更改通知和命令实现。
- 源生成器:编译时代码生成,可减少样板并提高性能。
- 依赖项注入支持:对依赖项注入的内置支持,用于管理视图模型和服务生命周期。
MVVM 工具包设计为易于使用并集成到现有项目中。 它与各种 .NET 平台(包括 WinUI、WPF 和 .NET MAUI)兼容。 可以查看 GitHub 存储库 上的一些示例应用或 Microsoft 应用商店上的 示例应用 ,了解 MVVM 工具包在不同方案中的使用方式。
MVVM 工具包与传统 MVVM 方法相比如何?
与传统方法相比,MVVM 工具包减少了样本 ViewModel 代码的数量,并简化了实现 MVVM 设计模式的许多方面。 下面是一些主要差异:
| 功能 / 特点 | 传统的 MVVM 方法 | MVVM 工具包方法论 |
|---|---|---|
| 属性更改通知 | 在基类中手动实现 INotifyPropertyChanged 并为每个属性引发 PropertyChanged 事件。 |
继承ObservableObject并使用SetProperty方法来自动触发PropertyChanged事件。 |
| 命令实现 | 为每个命令手动实现 ICommand 。 |
使用 RelayCommand 可以轻松创建具有最少模板代码的命令。 |
| Messaging | 实现自定义消息传送系统或使用第三方库。 | 使用内置 Messenger 类在组件之间分离通信。 |
| 模板代码 | 为属性更改通知和命令实现编写重复代码。 | 使用属性和源生成器减少样本代码。 |
| Performance | 由于反射和运行时代码生成,可能会导致性能开销。 | 源生成器提供编译时代码生成,从而提高性能。 |
| 依赖注入支持 | 需要手动设置和管理视图模型生命周期。 | 内置支持依赖注入,用于管理视图模型的生命周期。 |
| 学习曲线 | 可能需要更深入地了解 MVVM 概念和模式。 | 更容易学习和使用,专注于简单性和工作效率。 |
要了解更多关于 MVVM 设计模式的背景信息,请参阅Windows 数据绑定和 MVVM、模型-视图-视图模型(MVVM)以及INotifyPropertyChanged 接口的参考文档。
WinUI Notes 应用
本教程中生成的最后一个应用程序是 “创建 WinUI 应用 ”教程中 WinUI Notes 应用的重构版本。 应用允许用户创建、保存和加载多个笔记。 原始应用的用户界面保持不变,但更新的体系结构使用 MVVM 工具包进行数据绑定和查看模型管理。
AllNotesPage
NotePage
小窍门
生成 Windows 应用时,通常参考 API 参考文档和概念文档。在本教程中,你将在文本中看到内联链接,以及标记为“在 docs 中了解详细信息”的组中的链接。 这些链接是可选的;无需遵循它们即可完成本教程。 如果要记下开始创建自己的应用时所需的信息的位置,则会提供它们。