Windows フォーム データ バインディングの変更通知

更新 : 2007 年 11 月

Windows フォーム データ バインディングの重要な概念の 1 つに、"変更通知" があります。データ ソースとデータ バインド コントロールに常に最新のデータを持たせるためには、データ バインディングの変更通知を追加する必要があります。具体的には、データ ソースに加えられた変更がバインド コントロールに通知され、コントロールのバインド プロパティに加えられた変更がデータ ソースに通知されるようにします。

次のように、データ バインディングの種類に応じて異なる種類の変更通知があります。

  • 単純バインディング。1 つのコントロール プロパティがオブジェクトの 1 つのインスタンスにバインドされます。

  • リストベース バインディング。リスト内のアイテムのプロパティにバインドされる 1 つのコントロール プロパティ、またはオブジェクトのリストにバインドされるコントロール プロパティを含むことができます。

さらに、データ バインディングで使用する Windows フォーム コントロールを作成する場合、コントロールのバインド プロパティに対する変更がデータ ソースに反映されるように、コントロールに PropertyNameChanged パターンを適用する必要があります。

単純バインディングの変更通知

単純バインディングでは、バインド プロパティの値が変更されたときにビジネス オブジェクトが変更通知を出す必要があります。これは、ビジネス オブジェクトの各プロパティに対して PropertyNameChanged イベントを公開し、BindingSource またはビジネス オブジェクトが INotifyPropertyChanged インターフェイスを実装してプロパティの値が変更されたときに PropertyChanged イベントを起動するメソッドを使用して、ビジネス オブジェクトをコントロールにバインドすることによって実現できます。詳細については、「方法 : INotifyPropertyChanged インターフェイスを実装する」を参照してください。INotifyPropertyChanged インターフェイスを実装するオブジェクトを使用する場合、オブジェクトをコントロールにバインドするために BindingSource を使用する必要はありませんが、BindingSource の使用を推奨します。

リストベース バインディングの変更通知

Windows フォームは、バインド リストに依存して、プロパティ変更 (リスト アイテム プロパティ値の変更) および変更されたリスト (リストに対するアイテムの削除や追加) の情報をバインド コントロールに提供します。このため、データ バインディングに使用するリストには、両方の種類の変更通知を提供する IBindingList を実装する必要があります。BindingList<T> は、IBindingList の汎用実装で、Windows フォーム データ バインディングで使用するためにデザインされています。INotifyPropertyChanged を実装するビジネス オブジェクト タイプを含む BindingList<T> を作成できます。リストは PropertyChanged イベントを ListChanged イベントに自動的に変換します。バインド リストが IBindingList でない場合、オブジェクトのリストを BindingSource コンポーネントを使用して Windows フォーム コントロールにバインドする必要があります。BindingSource コンポーネントは、BindingList<T> の場合と同様にプロパティからリストへの変換を行います。詳細については、「方法 : BindingSource と INotifyPropertyChanged の各インターフェイスを使用して変更通知を発生させる」を参照してください。

カスタム コントロールの変更通知

最後に、コントロール側から、データにバインドされるようにデザインされた各プロパティに PropertyNameChanged イベントを公開する必要があります。これで、コントロール プロパティに対する変更は、バインド データ ソースに反映されます。詳細については、「方法 : PropertyNameChanged パターンを適用する」を参照してください。

参照

概念

Windows フォームがサポートするデータ ソース

データ連結と Windows フォーム

参照

BindingSource

INotifyPropertyChanged

BindingList<T>

その他の技術情報

Windows フォームでのデータ バインディング