通用可绑定接口

本文关键字:接口 绑定 | 更新日期: 2023-09-27 17:49:38

集合是可绑定的?ListDataTable是否有可以绑定到同一控件的通用接口?

通用可绑定接口

要解释List<T>DataTable是如何工作的(问题的脚注(,请阅读以下内容,但要注意:

  • List<T>实现IList并具有用于解析元数据的public T this[int index] {get;}
  • DataTable实现了IListSource,它提供了表的默认DataViewDataView实现IList,并实现ITypedList以提供元数据

集合按以下顺序绑定:

  • 对源进行CCD_ 14测试;如果可用,则通过GetList()获得IList
  • 否则对源进行CCD_ 17测试;如果不可用,则引发异常

则查询CCD_ 18的元数据:

  • 对CCD_ 19进行CCD_;如果可用,则通过GetProperties使用
  • IList是针对公共类型(非对象(索引器进行测试的,即public Foo this[int index] { get; }-如果找到,则暗示Foo是通过TypeDescriptor.GetProperties(Type)获得的类型和元数据
  • 否则,通过GetType()查询第一个项目(如果非空(的类型,并通过TypeDescriptor.GetProperties(Type)获取元数据

我们现在可以访问项目(IList(及其元数据;额外支持(可选(通过IBindingList(提供双向绑定和基本排序等(、IBindingListView(提供高级排序、过滤等(、ICancelAddNewIRaiseItemChangedEvents提供。

对于大多数常见的场景(显示数据并向后推送更改(,List<T>是可以的;如果您需要在发生时显示不相关的更新,BindingList<T>会有所帮助,但请注意,要支持成员级别的更新(而不仅仅是添加/删除等(,T必须实现INotifyPropertyChanged

作为参考,"元数据"在这里的意思是"一组PropertyDescriptor"(每列/属性1个(,它提供对底层数据的访问(当提供object时(以及关于成员本身的信息(名称、类型等(。

大多数控件都可以绑定到IList接口。

http://msdn.microsoft.com/en-us/library/system.collections.ilist.aspx

IBindingList