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

Windows フォームのデータ バインディングの最も重要な概念の 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 パターンを適用する」を参照してください

関連項目