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 パターンを適用する」を参照してください。