常见的可绑定接口

时间:2011-04-09 12:00:06

标签: c# .net data-binding interface datatable

什么使集合可绑定? List是否有通用接口,DataTable可以绑定到同一个控件吗?

3 个答案:

答案 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)