什么使集合可绑定? List
是否有通用接口,DataTable
可以绑定到同一个控件吗?
答案 0 :(得分:6)
要解释List<T>
和DataTable
的工作原理(问题的脚注),请阅读以下内容,但请注意:
List<T>
实施IList
并且public T this[int index] {get;}
用于解析元数据DataTable
实现了IListSource
,它提供了表格的默认DataView
; DataView
实现IList
,并实现ITypedList
以提供元数据集合按以下顺序绑定:
IListSource
;如果可用IList
是通过GetList()
IList
进行测试;如果不可用则抛出异常然后查询IList
的元数据:
IList
已针对ITypedList
进行了测试;如果可用,则通过GetProperties
IList
针对公共类型(非对象)索引器进行了测试,即public Foo this[int index] { get; }
- 如果找到,Foo
隐含为通过{{1}获得的类型和元数据} TypeDescriptor.GetProperties(Type)
查询类型,并通过GetType()
我们现在可以访问项目(TypeDescriptor.GetProperties(Type)
)及其元数据;通过IList
提供额外支持(可选)(提供双向绑定和基本排序等),IBindingList
(提供高级排序,过滤等),IBindingListView
和{{1} }。
对于大多数常见情况(显示数据和推送更改)ICancelAddNew
很好;如果您需要显示不相关的更新IRaiseItemChangedEvents
有帮助 - 但请注意,要支持成员级别更新(而不是添加/删除/等),List<T>
必须实施BindingList<T>
作为参考,“元数据”在这里表示“一组T
s”(每列/属性1个),它提供对底层数据的访问(当提供INotifyPropertyChanged
时),以及有关成员本身的信息(名称,类型等)。
答案 1 :(得分:0)
大多数控件都可以绑定到IList接口。
http://msdn.microsoft.com/en-us/library/system.collections.ilist.aspx
答案 2 :(得分:0)