データ バインディングに関連するインターフェイス
ADO.NET を使用すると、アプリケーションのバインドニーズと使用しているデータに合わせて、さまざまなデータ構造を作成できます。 Windows フォームでデータを提供または使用する独自のクラスを作成することもできます。 これらのオブジェクトは、基本的なデータ バインディングから、デザイン時のサポート、エラー チェック、変更通知、またはデータ自体に加えられた変更の構造化されたロールバックのサポートまで、さまざまなレベルの機能と複雑さを提供できます。
Data-Binding インターフェイスのコンシューマー
次のセクションでは、インターフェイス オブジェクトの 2 つのグループについて説明します。 最初のグループには、データ ソースの作成者によってデータ ソースに実装されているインターフェイスが一覧表示されます。 これらのインターフェイスは、ほとんどの場合、Windows フォーム コントロールまたはコンポーネントであるデータ ソース コンシューマーによって使用されるように設計されています。 2 番目のグループには、コンポーネント作成者が使用するために設計されたインターフェイスが一覧表示されます。 コンポーネント作成者は、Windows フォーム のデータ バインディング エンジンで使用されるデータ バインディングをサポートするコンポーネントを作成するときに、これらのインターフェイスを使用します。 フォームに関連付けられているクラス内にこれらのインターフェイスを実装して、データ バインディングを有効にすることができます。各ケースには、データとの対話を可能にするインターフェイスを実装するクラスが用意されています。 Visual Studio の迅速なアプリケーション開発 (RAD) データ設計エクスペリエンス ツールでは、この機能が既に利用されています。
データ ソース作成者による実装のためのインターフェイス
次のインターフェイスは、Windows フォーム コントロールで使用されるように設計されています。
IList インターフェイス
IList インターフェイスを実装するクラスには、Array、ArrayList、または CollectionBaseがあります。 これらは、Object型の項目のインデックス付きリストです。 インデックスの最初の項目が型を決定するため、これらのリストには同種の型を含める必要があります。 IList は、実行時にのみバインドに使用できます。
手記
Windows フォームとのバインド用にビジネス オブジェクトの一覧を作成する場合は、BindingList<T>の使用を検討する必要があります。 BindingList<T> は、双方向の Windows フォーム データ バインディングに必要なプライマリ インターフェイスを実装する拡張可能なクラスです。
IBindingList インターフェイス
IBindingList インターフェイスを実装するクラスは、はるかに高いレベルのデータ バインディング機能を提供します。 この実装では、リスト アイテムが変更されたとき (たとえば、顧客のリストの 3 番目の項目が [住所] フィールドに変更を加えるなど) と、リスト自体が変更されたとき (リスト内の項目の数が増減するなど) の両方について、基本的な並べ替え機能と変更通知が提供されます。 変更通知は、複数のコントロールを同じデータにバインドし、いずれかのコントロールで行われたデータ変更を他のバインドされたコントロールに反映させる場合に重要です。
手記
変更通知は、SupportsChangeNotification プロパティを介して IBindingList インターフェイスに対して有効になります。このプロパティを
true
すると、ListChanged イベントが発生し、リストが変更されたか、リスト内の項目が変更されていることを示します。変更の種類は、ListChangedEventArgs パラメーターの ListChangedType プロパティによって記述されます。 そのため、データ モデルが更新されるたびに、同じデータ ソースにバインドされている他のコントロールなどの依存ビューも更新されます。 ただし、リスト内に含まれるオブジェクトは、リストが変更されたときにリストに通知して、ListChanged イベントを発生させる必要があります。
手記
BindingList<T> は、IBindingList インターフェイスの一般的な実装を提供します。
IBindingListView インターフェイス
IBindingListView インターフェイスを実装するクラスは、IBindingListの実装のすべての機能と、フィルター処理と高度な並べ替え機能を提供します。 この実装では、文字列ベースのフィルター処理と、プロパティ記述子と方向のペアを使用した複数列の並べ替えが提供されます。
IEditableObject インターフェイス
IEditableObject インターフェイスを実装するクラスを使用すると、オブジェクトは、そのオブジェクトへの変更が永続的になるタイミングを制御できます。 この実装では、BeginEdit、EndEdit、および CancelEdit メソッドを使用して、オブジェクトに加えられた変更をロールバックできます。 次に、BeginEdit、EndEdit、および CancelEdit メソッドの機能と、それらが相互に連携してデータに加えられた変更のロールバックを可能にするしくみについて簡単に説明します。
BeginEdit メソッドは、オブジェクトの編集の開始を通知します。 このインターフェイスを実装するオブジェクトは、CancelEdit メソッドが呼び出された場合に更新を破棄できるように、BeginEdit メソッドの呼び出し後に更新プログラムを格納する必要があります。 Windows フォームのデータ バインディングでは、1 つの編集トランザクションのスコープ内で BeginEdit を複数回呼び出すことができます (たとえば、BeginEdit、BeginEdit、EndEdit)。 IEditableObject の実装では、BeginEdit が既に呼び出されているかどうかを追跡し、BeginEditへの後続の呼び出しを無視する必要があります。 このメソッドは複数回呼び出すことができるため、後続の呼び出しは非破壊的であることが重要です。つまり、後続の BeginEdit 呼び出しでは、最初の BeginEdit 呼び出しで保存されたデータが行われた更新を破棄したり、変更したりすることはできません。
EndEdit メソッドは、オブジェクトが現在編集モードの場合、BeginEdit が基になるオブジェクトに呼び出されたために変更をプッシュします。
CancelEdit メソッドは、オブジェクトに加えられた変更を破棄します。
BeginEdit、EndEdit、および CancelEdit メソッドの動作の詳細については、「データをデータベースに保存する」を参照してください。
このデータ機能のトランザクション概念は、DataGridView コントロールによって使用されます。
ICancelAddNew インターフェイス
ICancelAddNew インターフェイスを実装するクラスは、通常、IBindingList インターフェイスを実装し、AddNew メソッドを使用してデータ ソースに加えられた追加をロールバックできます。 データ ソースが IBindingList インターフェイスを実装している場合は、ICancelAddNew インターフェイスも実装する必要があります。
IDataErrorInfo インターフェイス
IDataErrorInfo インターフェイスを実装するクラスを使用すると、オブジェクトはバインドされたコントロールにカスタム エラー情報を提供できます。
IEnumerable インターフェイス
IEnumerable インターフェイスを実装するクラスは、通常、ASP.NET によって使用されます。 このインターフェイスに対する Windows フォームのサポートは、BindingSource コンポーネント経由でのみ使用できます。
手記
BindingSource コンポーネントは、バインドのために、すべての IEnumerable 項目を個別のリストにコピーします。
ITypedList インターフェイス
ITypedList インターフェイスを実装するコレクション クラスは、バインドされたコントロールに公開される順序とプロパティのセットを制御する機能を提供します。
手記
GetItemProperties メソッドを実装し、PropertyDescriptor 配列が null でない場合、配列の最後のエントリは、項目の別のリストであるリスト プロパティを記述するプロパティ記述子になります。
ICustomTypeDescriptor インターフェイス
ICustomTypeDescriptor インターフェイスを実装するクラスは、それ自体に関する動的な情報を提供します。 このインターフェイスは ITypedList に似ていますが、リストではなくオブジェクトに使用されます。 このインターフェイスは、基になる行のスキーマを投影するために DataRowView によって使用されます。 ICustomTypeDescriptor の簡単な実装は、CustomTypeDescriptor クラスによって提供されます。
手記
ICustomTypeDescriptorを実装する型へのデザイン時バインディングをサポートするには、型も IComponent を実装し、フォーム上のインスタンスとして存在する必要があります。
IListSource インターフェイス
IListSource インターフェイスを実装するクラスにより、リスト以外のオブジェクトに対するリスト ベースのバインドが可能になります。 IListSource の GetList メソッドは、IListから継承されないオブジェクトからバインド可能なリストを返すために使用されます。 IListSource は、DataSet クラスによって使用されます。
IRaiseItemChangedEvents インターフェイス
IRaiseItemChangedEvents インターフェイスを実装するクラスは、IBindingList インターフェイスも実装するバインド可能なリストです。 このインターフェイスは、あなたの型がその RaisesItemChangedEvents プロパティを通じて ItemChanged 型の ListChanged イベントを発生させるかどうかを示すために使用されます。
手記
データ ソースが前に説明したイベント変換を一覧表示するプロパティを提供し、BindingSource コンポーネントと対話している場合は、IRaiseItemChangedEvents を実装する必要があります。 それ以外の場合、BindingSource はプロパティを実行してイベント変換を一覧表示し、パフォーマンスが低下します。
ISupportInitialize インターフェイス
ISupportInitialize インターフェイスを実装するコンポーネントは、プロパティの設定と共依存プロパティの初期化にバッチ最適化を利用します。 ISupportInitialize には、次の 2 つのメソッドが含まれています。
ISupportInitializeNotification インターフェイス
ISupportInitializeNotification インターフェイスを実装するコンポーネントは、ISupportInitialize インターフェイスも実装します。 このインターフェイスを使用すると、初期化が完了したことを他の ISupportInitialize コンポーネントに通知できます。 ISupportInitializeNotification インターフェイスには、次の 2 つのメンバーが含まれています。
IsInitialized は、コンポーネントが初期化されているかどうかを示す
boolean
値を返します。Initialized は、EndInit が呼び出されたときに発生します。
INotifyPropertyChanged インターフェイス
このインターフェイスを実装するクラスは、プロパティ値のいずれかが変更されたときにイベントを発生させる型です。 このインターフェイスは、コントロールのプロパティごとに変更イベントを持つパターンを置き換えるために設計されています。 BindingList<T>で使用する場合、ビジネス オブジェクトは INotifyPropertyChanged インターフェイスを実装する必要があり、BindingList'1 は PropertyChanged イベントを ItemChanged型の ListChanged イベントに変換します。
手記
バインドされたクライアントとデータ ソースの間のバインドで変更通知が発生するには、バインドされたデータ ソースの種類で INotifyPropertyChanged インターフェイスを実装するか (推奨)、バインドされた型 propertyName
Changed
イベントを指定できますが、両方を行わないでください。
コンポーネント作成者による実装のためのインターフェイス
次のインターフェイスは、Windows フォームのデータ バインディング エンジンによって使用されるように設計されています。
IBindableComponent インターフェイス
このインターフェイスを実装するクラスは、データ バインディングをサポートする非制御コンポーネントです。 このクラスは、このインターフェイスの DataBindings および BindingContext プロパティを介して、コンポーネントのデータ バインディングとバインド コンテキストを返します。
手記
コンポーネントが Controlから継承している場合は、IBindableComponent インターフェイスを実装する必要はありません。
ICurrencyManagerProvider インターフェイス
ICurrencyManagerProvider インターフェイスを実装するクラスは、この特定のコンポーネントに関連付けられているバインドを管理するための独自の CurrencyManager を提供するコンポーネントです。 カスタム CurrencyManager へのアクセスは、CurrencyManager プロパティによって提供されます。
手記
Control から継承するクラスは、BindingContext プロパティを介してバインドを自動的に管理するため、ICurrencyManagerProvider を実装する必要があるケースはまれです。
関連項目
- データ バインディングと Windows フォーム
- 方法: Windows フォーム に Simple-Bound コントロールを作成する
- Windows フォームのデータ バインディング
.NET Desktop feedback