专栏首页哲学驱动设计WPF 中 ICollectionView 及 ItemsControl 相关的重点

WPF 中 ICollectionView 及 ItemsControl 相关的重点

OEA 框架 做 WPF 树型表格控件时,浪费了许多时间在一些知识点上,所以写了这篇博客总结一下,和各位博友分享。

ICollectionView 接口的简易使用方法

  1. 它的 SortDescriptions、GroupDescription 等属性会影响视图的结构,一般情况下会自动刷新。
  2. 也可以直接使用 Refresh 方法来命令视图的刷新(内部实现一般为重建内部视图模型集合)。
  3. 如果是批量操作,也可以使用 RefreshDefer 方法来抑制多次刷新,待多个更新操作后再统一刷新。

CollectionView 相关知识点

    实现它的类是 CollectionView,而这个类的最主要的两个子类是 ListCollectionView、BindingListCollectionView。这两个类的主要区别如下:

  1. ListCollectionView 一般用于数据列表是 IList 而不是 IBindingList 的集合的情况。由于视图集合无法监听底层数据列表的变更,所以数据列表变更后,需要手动进行刷新操作。也正是由于它与底层数据列表的关系不大,使得它的 Sort 操作是直接实现在此类中,可以简单地直接使用。
  2. BindingListCollectionView 用于 IBindingList 作为底层数据列表的情况。它可以监听数据列表的变更,自动进行刷新。但是它的 Sort、过滤 操作与底层数据相关。(见 MSDN:This is because BindingListCollectionView objects use the underlying IBindingList for sorting and filtering functionalities. 来自:BindingListCollectionView 类

    CollectionView 的创建一般使用 CollectionViewSource.GetDefaultView 方法,这一点是 WPF 中的默认机制。但是我们也可以直接使用构造函数来进行创建,例如,我们要为 IBindingList 列表构建 ListCollectionView 时,我们可以直接使用 new ListCollectionView(IList) 构造函数。当在 XAML 中进行类似的特殊构造时,我们则可以使用 CollectionViewSource 标签,并设置它的 CollectionViewType 属性。

ItemsControl 相关知识点

    ItemsControl 是 WPF 中最重要的集合控件基类,目前我见到的集合控件都是从这个类继承下来的。当然,这也是 WPF 控件设计规约之一。

    它的使用方法简单地说有两种:一种是使用 ItemsSource + ItemTemplate 来进行数据绑定;一种是直接使用 Items 属性来添加或者删除元素,这种使用方法和在 WinForm 下的使用方案比较类似,所以比较简单。

    ItemsControl.Items 属性

    ItemsControl 中的属性 Items 是 ItemCollection 类型,而它是继承自 CollectionView!!!也就是说,Items 其实是 ItemsSource 属性的视图集合类,我们可以通过这个属性来设置 ItemsControl 中集合的显示方案(Filter、Sorting、Grouping、Current)。

    ItemsCollection 对接口的所有实现基本上都是基于内部的 CollectionView 来实现的,它存储在 private ICollectionView _collectionView 这个字段中。当 ItemsSource 存在时,_collectionView 字段是 CollectionViewSource.GetDefaultView 来为 ItemsSource 找到它所对应的 CollectionView 对象。而当我们没有设置 ItemsSource 属性而是直接使用 Items 属性集合时,ItemsCollection 则会生成一个 InnerItemCollectionView 类的对象。

    目前就总结这些吧,以后有了再添加上来。

 发现一篇不错的文章:《ItemsControl: A to Z

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Rafy 框架 - 大批量导入实体

    某些场景下,开发者希望能够大批量地把实体的数据导入到数据库中。虽然使用实体仓库保存实体列表非常方便,但是其内部实现机制是一条一条的保存到数据库,当实体的个数较多...

    用户1172223
  • 《OEA - 实体扩展属性系统 - 设计方案说明书》

        这篇设计文档是 12 月份写来参加公司的研发峰会的,自己倒是信心满满,不过最后还是没有入围。现在想想也没啥大用,所以贴出来,期待与园友交流。     文...

    用户1172223
  • 基于OEA框架的客户化设计(二) 元数据设计

    上篇 已经就客户化的整体方案进行了叙述,这次主要是说明一些细节部分的设计。 类型的视图元数据     基于OEA框架的GIX4项目中,客户化工作主要是对各客户...

    用户1172223
  • linux学习第八篇:文件或目录权限chmod,更改所有者和所属组chown,umask,隐藏权限lsattr_chattr

    文件或目录权限chmod 三种基本权限 R           读         数值表示为4 W           写         数值表示为2 X ...

    用户1215343
  • 责任链模式实现的三种方式

    责任链模式的定义:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系, 将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理他为...

    黄泽杰
  • Dubbox连接注册中心常见错误

    这种错误是服务层代码没有成功注册到注册中心导致,请检查一下你的服务层代码是否添加了@service注解,并且该注解的包一定是com.alibaba.dubbo....

    一点博客
  • 如何在 CentOS 8 上安装和配置 Owncloud

    ownCloud 是一个开源的,自建的云平台,主要用于管理和分享文件。它可以被用来替代Dropbox, Microsoft OneDrive, 和 Google...

    雪梦科技
  • 数据可视、语义分割、T_Youtube、智能调酒 | Mixlab人工智能合集

    https://public.tableau.com/zh-cn/gallery/mapping-nba-shot-locations?tab=viz-of-t...

    mixlab
  • 【答疑解惑第三讲】硬件设计应该从那本书入手?

    疑惑一 学习过程中如何避免只听不练? 没必要专门的找练习去做,一般教材的后面都有课后题,做的前提是做这章节在理论都理解的差不多了,就在电脑上用编译器独立的完成,...

    程序员互动联盟
  • 工信部长:别嘚瑟了,看看全球科技实力排名,就知道中国还差多远

    近日,《科技日报》总编刘亚东在一场演讲中说到:公众有必要了解更多的东西,尤其应该知道,“我的国”也有不“厉害”的地方,甚至还受制于人!

    钱塘数据

扫码关注云+社区

领取腾讯云代金券