BindingSource クラスが何をするのか、つまり、データ ソースと UI コントロールの間に間接レイヤーを提供するということを十分に理解していると思います。IBindingList インターフェイスを実装しているため、並べ替えもサポートされます。そして、あまり問題なく、十分に頻繁に使用しました。しかし、必要以上に頻繁に使用するかどうかは疑問です。おそらく、例が役立つでしょう。
フォームに単純なテキスト ボックス (WinForms を使用) があり、そのテキスト ボックスを、文字列を返すクラス内の単純なプロパティにバインドしたいとします。この状況で BindingSource を使用する価値はありますか?
ここで、フォームにグリッドがあり、それを DataTable にバインドしたいとします。今すぐ BindingSource を使用する必要がありますか?
後者の場合、収集できるものから DataTable として BindingSource を使用しない可能性が高く、BindingSource 自体が提供するのと同じ機能を提供します。グリッドが自動的に更新されるように、行が追加、削除などされると、DataTable は適切なイベントを発生させます。
しかし、テキスト ボックスが文字列にバインドされている最初のケースでは、おそらく文字列プロパティを含むクラスに INotifyPropertyChanged を実装させ、文字列が変更されたときに PropertyChanged イベントを発生させることができます。これらの PropertyChanged イベントをリッスンできるように BindingSource を使用して、文字列が変更されたときにテキスト ボックスを自動的に更新できるようにします。
これまでのところ、これはどのように聞こえますか?全体像を見るのを妨げている私の理解にはまだギャップがあるように感じます. これまでのところ、これはかなり漠然とした質問だったので、より具体的な質問をいくつかしてみます - 理想的には、回答は上記の例または類似のものを参照します...
(1) 上記の例のいずれかで BindingSource を使用する価値はありますか?
(2) 開発者は、適切なタイミングで PropertyChanged イベントを発生させるという点で、DataTable クラスが適切なことを行うと「想定」しているようです。データソースがこれを行うことができるかどうかをどのように知ることができますか? 開発者がこの動作を想定できるようにするために、データ ソースが実装する必要がある特定のインターフェイスはありますか?
(3) BindingSource を使用するかどうかを検討するとき、どの Control にバインドされているかは重要ですか? それとも、決定に影響を与えるのはデータ ソースだけですか? おそらく答えは (そしてこれは十分に論理的に思えるでしょう): Control は PropertyChanged イベントをリッスンするのに十分なほどインテリジェントである必要があります。それ以外の場合は BindingSource が必要です。では、コントロールがこれを行うことができるかどうかをどのように判断しますか? 繰り返しますが、開発者が探すことができ、コントロールが実装する必要がある特定のインターフェイスはありますか?
過去に、常にBindingSource を使用するようになったのは、この混乱です。しかし、必要な場合にのみ使用するように、いつ使用するかをより正確に理解したいと思います。