次の方法で共有


.NET Framework アプリケーションのデータに WPF コントロールをバインドする

DataSet クラスと関連クラスは、アプリケーションがデータベースから切断されている間にアプリケーションがメモリ内のデータを操作できるようにする、2000 年代初頭のレガシ .NET Framework テクノロジです。 このテクノロジは、ユーザーがデータを変更し、変更をデータベースに保持できるアプリに特に役立ちます。 データセットは実証済みの成功したテクノロジですが、新しい .NET アプリケーションには Entity Framework Core を使用することをお勧めします。 Entity Framework は、オブジェクト モデルとして表形式データを操作するより自然な方法を提供し、よりシンプルなプログラミング インターフェイスを備えています。

WPF コントロールにデータをバインドすることで、アプリケーションのユーザーにデータを表示できます。 これらのデータ バインド コントロールを作成するには、[ データ ソース] ウィンドウから Visual Studio の WPF デザイナーに項目をドラッグします。 このトピックでは、データ バインド WPF アプリケーションの作成に使用できる最も一般的なタスク、ツール、クラスについて説明します。

Visual Studio でデータ バインド コントロールを作成する方法の一般的な情報については、「Visual Studio で コントロールをデータにバインドする」を参照してください。 WPF データ バインディングの詳細については、「 データ バインディングの概要」を参照してください。

WPF コントロールのデータへのバインドに関連するタスク

次の表に、データ ソース ウィンドウから WPF デザイナーに項目をドラッグすることで実行できるタスクを示します。

課題 詳細情報
新しいデータ バインド コントロールを作成します。

既存のコントロールをデータにバインドします。
WPF コントロールをデータセットにバインドする
親子関係の関連データを表示するコントロールを作成します。ユーザーが 1 つのコントロールで親データ レコードを選択すると、別のコントロールには、選択したレコードの関連する子データが表示されます。 WPF アプリケーションで関連データを表示する
別の テーブル の外部キー フィールドの値に基づいて、あるテーブルの情報を表示する参照テーブルを作成します。 WPF アプリケーションで参照テーブルを作成する
データベース内のイメージにコントロールをバインドします。 データベースから画像にコントロールをバインドする

有効なドロップ ターゲット

[ データ ソース] ウィンドウの項目は、WPF デザイナーの有効なドロップ ターゲットにのみドラッグできます。 有効なドロップ ターゲットには、コンテナーとコントロールの 2 種類があります。 コンテナーは、通常コントロールを含むユーザー インターフェイス要素です。 たとえば、グリッドはコンテナーであり、ウィンドウも同様です。

生成された XAML とコード

項目を [データ ソース] ウィンドウから WPF デザイナーにドラッグすると、Visual Studio によって、新しいデータ バインド コントロールを定義する XAML が生成されます (または、既存のコントロールをデータ ソースにバインドします)。 一部のデータ ソースの場合、Visual Studio では、データ ソースにデータを格納するコードビハインド ファイル内のコードも生成されます。

次の表は、[ データ ソース ] ウィンドウのデータ ソースの種類ごとに Visual Studio によって生成される XAML とコードの一覧です。

データ ソース データ ソースにコントロールをバインドする XAML を生成する データ ソースにデータを入力するコードを生成する
データセット イエス イエス
Entity Data Model イエス イエス
Service イエス いいえ
オブジェクト イエス いいえ

データセット

テーブルまたは列を [データ ソース] ウィンドウからデザイナーにドラッグすると、次の処理を行う XAML が Visual Studio によって生成されます。

  • 項目をドラッグしたコンテナーのリソースにデータセットと新しい 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 を生成します (または、既存のコントロールをオブジェクトまたはプロパティにバインドします)。 ただし、Visual Studio では、プロキシ サービス オブジェクトにデータを格納するコードは生成されません。 このコードは自分で記述する必要があります。 この方法を示す例については、「 WPF コントロールを WCF データ サービスにバインドする」を参照してください。

Visual Studio では、次の処理を行う XAML が生成されます。

  • 項目をドラッグしたコンテナーのリソースに新しい CollectionViewSource を追加します。 CollectionViewSourceは、サービスによって返されるオブジェクト内のデータの移動と表示に使用できるオブジェクトです。

  • コントロールのデータ バインディングを作成します。 項目をデザイナーの既存のコントロールにドラッグすると、XAML によってコントロールが項目にバインドされます。 項目をコンテナーにドラッグすると、XAML によってドラッグされた項目に対して選択されたコントロールが作成され、コントロールが項目にバインドされます。 コントロールは、新しい Grid内に作成されます。

オブジェクト

オブジェクトまたはプロパティを [ データ ソース] ウィンドウからデザイナーにドラッグすると、データ バインド コントロールを作成する XAML が生成されます (または、既存のコントロールをオブジェクトまたはプロパティにバインドします)。 ただし、Visual Studio では、オブジェクトにデータを格納するコードは生成されません。 このコードは自分で記述する必要があります。

カスタム クラスはパブリックである必要があり、既定では、パラメーターのないコンストラクターを持っている必要があります。 構文に「ドット」を含むネストクラスにすることはできません。 詳細については、「WPF の XAML クラスとカスタム クラス」を参照してください。

Visual Studio では、次の処理を行う XAML が生成されます。

  • 項目をドラッグしたコンテナーのリソースに新しい CollectionViewSource を追加します。 CollectionViewSourceは、オブジェクト内のデータの移動と表示に使用できるオブジェクトです。

  • コントロールのデータ バインディングを作成します。 項目をデザイナーの既存のコントロールにドラッグすると、XAML によってコントロールが項目にバインドされます。 項目をコンテナーにドラッグすると、XAML によってドラッグされた項目に対して選択されたコントロールが作成され、コントロールが項目にバインドされます。 コントロールは、新しい Grid内に作成されます。

こちらも参照ください

  • Visual Studio でコントロールをデータにバインドする