我想在Windows窗体应用程序中的DataGridView中显示人员列表。我希望我的服务层返回一个Person对象的列表(例如IList<Person>)。我希望列表中的更改反射(reflect)在DataGridView中,反之亦然。我的理解是,使用BindingSource可以简化DataGridView的使用。我的问题是双向数据绑定(bind)能否正常工作,我需要:

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

或者我可以做:
BindingSource.DataSource = IList<Person>

有什么不同?如果我对列表进行更改,是否可以通过两种方式更新DataGridView?如果我必须使用BindingList,从我的服务层返回BindingList似乎有点不方便(因为创建了依赖项),有没有办法解决?

微软谈到了BindingList(在“备注”部分中)
http://msdn.microsoft.com/en-us/library/ms132679.aspx:

最佳答案

如果使用BindingList<T>,则通过基础列表进行的更改将反射(reflect)在数据绑定(bind)控件中,因为在列表更改时BindingList会引发一个事件。其他大多数收藏集则没有。

如果您使用普通集合作为数据源,那么通过其他数据绑定(bind)控件(或通过BindingSource)所做的更改仍将反射(reflect)出来,但直接对基础集合的更改不会反射(reflect)出来。

关于c# - WinForms DataBinding是否需要BindingSource和BindingList?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4675874/

10-10 07:59