12

DataGridViewWindows フォーム アプリで人の一覧を表示したいと考えています。サービス レイヤーが Person オブジェクトのリストを返すようにします (例: IList<Person>)。リストの変更を に反映させたい、DataGridViewまたはその逆を行いたい。私の理解では、 を使用すると でのBindingSource作業が容易になりDataGridViewます。私の質問は、双方向のデータバインディングが機能することです。必要ですか:

//pseudo code
BindingSource.DataSource = IBindingList<Person>

または私はすることができます:

BindingSource.DataSource = IList<Person>

違いは何ですか?リストに変更を加えた場合、DataGridViewどちらの方法でも更新されますか? を使用する必要がある場合、 (依存関係を作成するため)サービス層からBindingListを返すのは少し不安定に思えますが、それを回避する方法はありますか?BindingList

Microsoft はBindingList(備考セクションで) http://msdn.microsoft.com/en-us/library/ms132679.aspxについて述べています。

BindingSource「しかし、典型的なソリューション プログラマーは、 を直接使用する代わりに、 などのデータ バインディング機能を提供するクラスを使用しBindingList<T>ます。」

4

2 に答える 2

11

willへのバインディングは、IList<Person>一方向のバインディングのみを提供します。リストまたはリスト アイテムへの変更は、に反映されませんDataGridViewBindingList代わりにorを使用しBindingSourceてこの機能を取得できますが、Personクラスは引き続きサポートする必要がありINotifyPropertyChangedます。そうしないと、リスト項目自体が変更されたときではなく、項目がリストに追加/リストから削除されたときにのみ同期が取得されます。

への依存を避けたい場合は、代わりにSystem.Windows.Forms使用できます。ObservableCollection<Person>これは必要な変更通知をサポートするため、双方向バインディング ソースとして使用できます。

于 2011-01-13T01:33:23.737 に答える
3

を使用するBindingList<T>場合、リストが変更されるとBindingListがイベントを発生させるため、基になるリストを介して行った変更はデータバインドされたコントロールに反映されます。他のほとんどのコレクションはそうではありません。

通常のコレクションをデータソースとして使用する場合、他のデータバインドコントロール(またはBindingSource)を介して行った変更は引き続き反映されますが、基になるコレクションへの直接の変更は反映されません。

于 2011-01-13T01:31:14.667 に答える