WinUI 说明第 2 部分 - 导航和数据绑定

本教程演示如何使用 XAML 和 C# 在 WinUI 3 应用中使用导航和数据绑定。

本教程中,您将学习如何:

  • 启用 NavigationCacheMode 以在导航过程中保留同一个 Page 实例。
  • 实现 INotifyPropertyChanged 接口,以通知数据绑定数据已更新。
  • 导航时,在页面之间传递对象。

本教程通过“创建第一个 WinUI 3 应用”教程改进了 WinUI Notes 示例应用。 如果已完成该教程,可以继续使用同一代码。 或者,可以从GitHub存储库下载该教程的完整代码,并将其用作本教程的起点。

在任一情况下,都应熟悉在 创建第一个 WinUI 3 应用 教程中创建的概念和代码。

Tip

还可以从 WinUI Notes 第 2 部分的 GitHub 存储库下载或查看本教程的完整代码。 若要查看项目的起点和终点之间的差异,请参阅此提交: 第 2 部分的更新

Background

为了保持内容简洁,并介绍一些基础概念,创建你的第一个 WinUI 3 应用教程更注重简洁性而非效率。 因此,虽然应用有效,但有一些可以改进的东西。

关键问题与在应用中的页面之间导航有关。 默认情况下, 页面 实例在导航时不会保存,因此每次导航到一 Page个新实例时都会创建一个新实例。 在 WinUI Notes 应用中,notesModel 对象是在 AllNotesPage 构造函数中创建的,并通过读取文件系统中的所有笔记来填充该对象。

public sealed partial class AllNotesPage : Page
{
    private AllNotes notesModel = new AllNotes();
    ...
}

每次从 NotePage 导航回 AllNotesPage 时,都会重新创建 notesModel,并从文件系统重新读取所有笔记。 在数据量不大的小型示例应用中,这种低效通常并不明显,但例如在需要从文件系统读取数千张大尺寸图像的照片应用中,这就是不可接受的。

若要解决此问题,本教程将介绍以下步骤:

  • 首先,确保缓存 Page 实例,以便在导航时重新使用实例,而不是重新创建实例。
  • 更新 Note 类,以便在注释文本发生任何更改时通知绑定的属性。
  • 确保 notesModel 能根据已保存或已删除的笔记进行正确更新,因为它不会在每次导航时重新创建。

Tip

生成 Windows 应用时,经常引用 API 参考文档和概念文档。 在本教程中,您会看到文本中的内联链接,以及标有“在文档中了解更多:”的链接组。 这些链接是可选的;无需遵循它们即可完成本教程。 它们已经提供,以便您在开始创建自己的应用程序时记下需要的信息出处。