注
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 でコントロールをデータにバインドする