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