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