Visual Studio でのデータへの WPF コントロールのバインド
データを WPF コントロールにバインドすることで、アプリケーションのユーザーに対してデータを表示できます。 これらのデータ バインド コントロールを作成するには、[データ ソース] ウィンドウから Visual Studio の WPF デザイナーに項目をドラッグします。 このトピックでは、データ バインド WPF アプリケーションの作成に使用できる最も一般的なタスク、ツール、およびクラスについて説明します。
Visual Studio でデータ バインド コントロールを作成する方法に関する一般的な情報については、「Visual Studio でのデータへのコントロールのバインド」を参照してください。WPF のデータ バインドの詳細については、「データ バインディングの概要」を参照してください。
データへの WPF コントロールのバインドに関連するタスク
次の表に、[データ ソース] ウィンドウから WPF デザイナーに項目をドラッグすることで実行できるタスクを示します。
タスク |
詳細情報 |
---|---|
データ バインド コントロールを作成する。 既存のコントロールをデータにバインドする。 |
|
親子のリレーションシップを持つ関連データを表示するコントロールを作成する。あるコントロールの親データ レコードを選択すると、その選択レコードに関連する子データが別のコントロールに表示されるようにします。 |
|
あるテーブルの外部キー フィールドの値に基づいて、別のテーブルの情報を表示するルックアップ テーブルを作成する。 |
|
コントロールをデータベース内のイメージにバインドする。 |
有効なドロップ ターゲット
[データ ソース] ウィンドウ内の項目は、WPF デザイナーの有効なドロップ ターゲットにのみドラッグできます。 有効なドロップ ターゲットの種類は、主にコンテナーとコントロールの 2 つです。 コンテナーとは、通常はコントロールを含むユーザー インターフェイス要素です。 たとえば、グリッドやウィンドウはコンテナーです。
生成される XAML およびコード
[データ ソース] ウィンドウから WPF デザイナーに項目をドラッグすると、Visual Studio は、新しいデータ バインド コントロールを定義する (または、既存のコントロールをデータ ソースにバインドする) XAML を生成します。 一部のデータ ソースでは、Visual Studio により、データ ソースにデータを読み込むためのコードも分離コード ファイルに生成されます。
次の表に、Visual Studio で [データ ソース] ウィンドウの各データ ソースに対して生成される XAML とコードを示します。
データ ソース |
コントロールをデータ ソースにバインドする XAML の生成 |
データ ソースにデータを読み込むコードの生成 |
---|---|---|
データセット |
○ |
○ |
エンティティ データ モデル |
○ |
○ |
サービス |
○ |
× |
オブジェクト |
○ |
× |
データセット
[データ ソース] ウィンドウからデザイナーにテーブルまたは列をドラッグすると、Visual Studio は、次の処理を行う XAML を生成します。
項目をドラッグした先のコンテナーのリソースに、データセットと新しい CollectionViewSource を追加する。 CollectionViewSource は、データセットのデータの移動と表示に使用できるオブジェクトです。
コントロールのデータ バインディングを作成する。 デザイナーの既存のコントロールに項目をドラッグすると、XAML により、その項目にコントロールがバインドされます。 コンテナーに項目をドラッグすると、XAML により、ドラッグした項目に対して選択されたコントロールが作成され、そのコントロールが項目にバインドされます。 コントロールは、新しい Grid 内に作成されます。
Visual Studio は、分離コード ファイルに次の変更も加えます。
- コントロールを格納する UI 要素の Loaded イベント ハンドラーを作成する。 イベント ハンドラーは、テーブルにデータを読み込み、コンテナーのリソースから CollectionViewSource を取得して、最初のデータ項目を現在の項目にします。 Loaded イベント ハンドラーが既に存在する場合、Visual Studio はこのコードを既存のイベント ハンドラーに追加します。
Entity Data Model
[データ ソース] ウィンドウからデザイナーにエンティティまたはエンティティ プロパティをドラッグすると、Visual Studio は、次の処理を行う XAML を生成します。
項目をドラッグした先のコンテナーのリソースに、新しい CollectionViewSource を追加する。 CollectionViewSource は、エンティティのデータの移動と表示に使用できるオブジェクトです。
コントロールのデータ バインディングを作成する。 デザイナーの既存のコントロールに項目をドラッグすると、XAML により、その項目にコントロールがバインドされます。 コンテナーに項目をドラッグすると、XAML により、ドラッグした項目に対して選択されたコントロールが作成され、そのコントロールが項目にバインドされます。 コントロールは、新しい Grid 内に作成されます。
Visual Studio は、分離コード ファイルに次の変更も加えます。
デザイナーにドラッグされたエンティティ (または、デザイナーにドラッグされたプロパティを含むエンティティ) のクエリを返す新しいメソッドを追加する。 新しいメソッドには GetEntityNameQuery という名前が付けられます。EntityName はエンティティの名前です。
コントロールを格納する UI 要素の Loaded イベント ハンドラーを作成する。 イベント ハンドラーは、GetEntityNameQuery メソッドを呼び出してエンティティにデータを読み込み、コンテナーのリソースから CollectionViewSource を取得して、最初のデータ項目を現在の項目にします。 Loaded イベント ハンドラーが既に存在する場合、Visual Studio はこのコードを既存のイベント ハンドラーに追加します。
サービス
[データ ソース] ウィンドウからデザイナーにサービス オブジェクトまたはプロパティをドラッグすると、Visual Studio は、データ バインド コントロールを作成する (または、既存のコントロールをオブジェクトやプロパティにバインドする) XAML を生成します。 ただし、Visual Studio はプロキシ サービス オブジェクトにデータを読み込むコードを生成しません。 このコードは、ユーザーが手動で記述する必要があります。 この方法を示す例については、「チュートリアル: WCF Data Service への WPF コントロールのバインド」を参照してください。
Visual Studio は、次の処理を行う XAML を生成します。
項目をドラッグした先のコンテナーのリソースに、新しい CollectionViewSource を追加する。 CollectionViewSource は、サービスから返されるオブジェクトのデータの移動と表示に使用できるオブジェクトです。
コントロールのデータ バインディングを作成する。 デザイナーの既存のコントロールに項目をドラッグすると、XAML により、その項目にコントロールがバインドされます。 コンテナーに項目をドラッグすると、XAML により、ドラッグした項目に対して選択されたコントロールが作成され、そのコントロールが項目にバインドされます。 コントロールは、新しい Grid 内に作成されます。
オブジェクト
[データ ソース] ウィンドウからデザイナーにオブジェクトまたはプロパティをドラッグすると、Visual Studio は、データ バインド コントロールを作成する (または、既存のコントロールをオブジェクトやプロパティにバインドする) XAML を生成します。 ただし、Visual Studio はオブジェクトにデータを読み込むコードを生成しません。 このコードは、ユーザーが手動で記述する必要があります。
注意
カスタム クラスはパブリックで、既定のパラメーターなしのコンストラクターを備えている必要があります。 構文に "ドット" が含まれる入れ子になったクラスにすることはできません。 詳細については、「WPF における XAML とカスタム クラス」を参照してください。
Visual Studio は、次の処理を行う XAML を生成します。
項目をドラッグした先のコンテナーのリソースに、新しい CollectionViewSource を追加する。 CollectionViewSource は、オブジェクトのデータの移動と表示に使用できるオブジェクトです。
コントロールのデータ バインディングを作成する。 デザイナーの既存のコントロールに項目をドラッグすると、XAML により、その項目にコントロールがバインドされます。 コンテナーに項目をドラッグすると、XAML により、ドラッグした項目に対して選択されたコントロールが作成され、そのコントロールが項目にバインドされます。 コントロールは、新しい Grid 内に作成されます。
参照
処理手順
方法: Visual Studio でデータに WPF コントロールをバインドする
方法: WPF アプリケーションでルックアップ テーブルを作成する
チュートリアル: Entity Data Model への WPF コントロールのバインド
チュートリアル: データセットへの WPF コントロールのバインド
チュートリアル: WCF Data Service への WPF コントロールのバインド
チュートリアル: WPF アプリケーションでの関連データの表示