要解释如何List<T>和DataTable工作(问题的脚注),请阅读以下内容,但注意到:
List<T>实现IList并具有public T this[int index] {get;}用于解析元数据的DataTableimplements IListSource,提供表的默认值DataView; 的DataView器具IList,和器具ITypedList提供的元数据集合按以下顺序绑定:
IListSource; 如果可以的话,IList是通过GetList()IList; 如果不可用则抛出异常然后IList查询元数据:
IList被测试ITypedList; 如果可用,这是通过使用GetPropertiesIList公共类型(非对象)索引器进行测试,即public Foo this[int index] { get; }- 如果找到,Foo则暗示为通过类型和元数据获得的TypeDescriptor.GetProperties(Type)GetType()类型和通过获取的元数据查询第一个项目(如果非空)TypeDescriptor.GetProperties(Type)我们现在可以访问items(IList)及其元数据; 提供额外支持(可选)IBindingList(提供双向绑定和基本排序等),IBindingListView(提供高级排序,过滤等),ICancelAddNew以及IRaiseItemChangedEvents.
对于大多数常见的场景(显示数据和推送更改)List<T>很好; 如果你需要显示不相关的更新,因为它们发生了BindingList<T>帮助 - 但请注意,为了支持成员级更新(而不是仅添加/删除/等),T必须实现INotifyPropertyChanged
作为参考,"元数据"在这里表示"一组PropertyDescriptors"(每列/属性1个),它提供对底层数据的访问(当提供时object),以及有关成员本身的信息(名称,类型等).
| 归档时间: |
|
| 查看次数: |
793 次 |
| 最近记录: |