WinUI ノート パート 2 - ナビゲーションとデータ バインディング

このチュートリアルでは、XAML と C# を使用して WinUI 3 アプリでナビゲーションとデータ バインディングを使用する方法について説明します。

このチュートリアルでは、以下の内容を学習します。

  • NavigationCacheModeを有効にして、移動時にPageの同じインスタンスを保持します。
  • INotifyPropertyChanged インターフェイスを実装して、データが更新されたことをデータ バインディングに通知します。
  • 移動時にページ間でオブジェクトを渡します。

このチュートリアルでは、初めての WinUI 3 アプリを作成する チュートリアルの WinUI Notes サンプル アプリを基に、さらに発展させます。 このチュートリアルを完了している場合は、同じコードを引き続き使用できます。 または、GitHub リポジトリからそのチュートリアルの完成したコードをダウンロードし、このチュートリアルの開始点として使用することもできます。

どちらの場合も、提示される概念と、 最初の WinUI 3 アプリの作成 に関するチュートリアルで作成したコードを理解している必要があります。

Tip

WinUI ノート パート 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 リファレンス ドキュメントと概念ドキュメントを頻繁に参照します。 このチュートリアルでは、リンクがテキスト内にインラインで表示され、「ドキュメントの詳細:」というラベルが付いたグループに表示されます。 これらのリンクは省略可能です。チュートリアルを完了するためにそれらに従う必要はありません。 これらは、独自のアプリの作成を開始するときに必要な情報を検索する場所をメモする場合に提供されます。