web-dev-qa-db-ja.com

List <T> vs BindingList <T>利点/欠点

誰かが私のプロジェクトの2つの違いを説明できますか?.

現在、_List<MyClass>_があり、BindingSourceをそれに設定し、DataGridViewをBindingSourceに設定します。

IEditableObjectを実装したので、CancelEditが呼び出されると、オブジェクトをMemberwise.Clone()を使用した状態に戻します

リストをBindingListに変更すると、これが解決されますか。BindingListを使用する利点は何ですか?

83
Jon

List<>は、いくつかのヘルパー関数(例:ソート)を備えた、特定のタイプのアイテムの単純なサイズ変更配列です。それは単なるデータであり、モデル内のオブジェクトのセットに対して操作を実行するために使用する可能性があります。

BindingList<>は、型付きリストまたはコレクションのラッパーであり、IBindingListインターフェイスを実装します。これは、双方向のデータバインディングをサポートする標準インターフェイスの1つです。 ListChangedイベントを実装することで機能します。これは、アイテムを追加、削除、または設定するときに発生します。バインドされたコントロールは、表示を更新するタイミングを知るためにこのイベントをリッスンします。

BindingSourceのDataSourceをList<>に設定すると、リストをラップするためにBindingList<>が内部的に作成されます。 BindingSourceの外部でリストにアクセスする場合は、リストをBindingList<>で事前にラップすることもできますが、それ以外はまったく同じです。 BindingList<>から継承して、アイテムを変更するときの特別な動作を実装することもできます。

IEditableObjectは、BindingSourceによって処理されます。バインドされたコントロールのデータを変更すると、実装オブジェクトでBeginEditを呼び出します。その後、BindingSourceでEndEdit/CancelEditを呼び出すと、オブジェクトに渡されます。別の行に移動すると、EndEditも呼び出されます。

116
Alex J

BindingListは、イベントを使用して双方向のデータバインディングを許可します。Listは、コレクションが変更されたときにイベントを発生させません。

私はそれがあなたの特定の問題を解決するとは思わない。

11
Gerrie Schenck