Xamarin.Forms のデータ バインディング

Download Sampleサンプルのダウンロード

データ バインディングは、2 つのオブジェクトのプロパティをリンクして、片方のプロパティへの変更が自動的にもう片方のプロパティに反映されるようにする手法です。 データ バインディングは、Model-View-ViewModel (MVVM) アプリケーション アーキテクチャにとって不可欠の部分です。

データのリンクに関する問題

Xamarin.Forms アプリケーションは 1 つ以上のページで構成され、通常はそのそれぞれに "ビュー" と呼ばれるユーザー インターフェイス オブジェクトが複数含まれています。 プログラムの主なタスクの 1 つは、各ビューを同期された状態に保ち、それらが表すさまざまな値や選択を追跡することです。 多くの場合、ビューは基になるデータ ソースの値を表していて、ユーザーが各ビューを操作してそのデータを変更します。 ビューが変更された場合は、基になるデータにその変更が反映される必要があり、また同様に、基になるデータが変更された場合は、その変更がビューに反映される必要があります。

このジョブを適切に処理するために、各ビューや基になるデータへの変更をプログラムに通知する必要があります。 一般的なソリューションは、変更が発生したときに通知されるイベントを定義することです。 次に、これらの変更について通知されるイベント ハンドラーを導入することができます。 これは、1 つのオブジェクトからのデータを別のものに転送することで応答します。 しかし、ビューが多数存在している場合、イベント ハンドラーも多数必要となり、たくさんのコードが関与します。

データ バインディングのソリューション

データ バインディングによってこのジョブが自動化され、イベント ハンドラーが不要になります。 データ バインディングは、コードまたは XAML のどちらでも実装できますが、分離コード ファイルのサイズを小さくできる XAML での方がはるかに一般的です。 イベント ハンドラーにおける手続き型コードを宣言型コードまたはマークアップに置き換えることで、アプリケーションが簡略化されてわかりやすくなります。

データ バインディングに関与する 2 つのオブジェクトのうちの 1 つは、ほとんど常に、View から派生してページのビジュアル インターフェイスの一部を形成している要素となります。 もう一方のオブジェクトは次のいずれかです。

  • 通常は同じページ上にある、View の別の派生クラス。
  • コード ファイル内のオブジェクト。

DataBindingDemos サンプルにあるようなデモ プログラムでは、View の 2 つの派生クラス間のデータ バインディングは、多くの場合、わかりやすさと簡潔さのために示されます。 ただし、View と別のオブジェクト間のデータ バインディングにも、同じ原則を適用できます。 アプリケーションが Model-View-ViewModel (MVVM) アーキテクチャを使って構築されている場合、基になるデータを使うクラスは多くの場合 viewmodel と呼ばれます。

データ バインディングついては、次の一連の記事で説明されています。

基本的なバインディング

データ バインディングのターゲットとソースの違いについて学習し、コードと XAML における単純なデータ バインディングを確認します。

バインディング モード

バインディング モードによって 2 つのオブジェクト間のデータ フローを制御する方法について説明します。

String Formatting

データ バインディングを使って、オブジェクトを書式設定して文字列として表示させます。

バインディング パス

データ バインディングの Path プロパティについて詳しく調べ、サブプロパティとコレクションのメンバーにアクセスします。

値コンバーターのバインディング

値コンバーターのバインディングを使って、データ バインディング内の値を変更します。

相対的なバインディング

相対バインドを使用して、バインド ターゲットの位置に対して相対的なバインド ソースを設定します。

フォールバックのバインディング

バインディングのプロセスが失敗した場合に使うフォールバック値を定義することにより、より堅牢なデータ バインディングを実現します。

複数バインド

Binding オブジェクトのコレクションを、単一のバインディング ターゲットのプロパティにアタッチします。

コマンド インターフェイス

データ バインディングを使って Command プロパティを実装します。

コンパイル済みのバインディング

コンパイル済みのバインディングを使ってデータ バインディングのパフォーマンスを向上させます。