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 类的对象。


 


 

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

目录
相关文章
|
2月前
|
C# 容器
浅谈WPF之UniformGrid和ItemsControl
在日常开发中,有些布局非常具有规律性,比如相同的列宽,行高,均匀的排列等,为了简化开发,WPF提供了UniformGrid布局和ItemsControl容器,本文以一个简单的小例子,简述,如何在WPF开发中应用UniformGrid和ItemsControl实现均匀的布局,仅供学习分享使用,如有不足之处,还请指正。
67 0
|
C# Windows
WPF ItemsControl ListBox ListView比较
原文:WPF ItemsControl ListBox ListView比较 在进行列表信息展示时,WPF中提供多种列表可供选择。这篇博客将对WPF ItemsControl, ListBox, ListView进行比较。
1094 0
|
C#
WPF里ItemsControl的分组实现
原文:WPF里ItemsControl的分组实现   我们在用到ItemsControl时,有时会用到分组,如ListBox,ListView,DataGrid。WPF的ItemsControl可以实现分组,是依托于GroupStyle,以ListBox为例,他的分组效果图为:   以下为前台...
1071 0
|
C#
WPF中Expander与ListBox(ItemsControl)嵌套中的问题
原文:WPF中Expander与ListBox(ItemsControl)嵌套中的问题 1. 当ListBox放在Expander中时,为了要实现实时更新数据的效果,这里使用了    ObservableCollection类型来作为数据源,         初始的简单例子如下:只有一个List...
1726 0
|
C# 虚拟化 自然语言处理
WPF中ItemsControl应用虚拟化时找到子元素的方法
原文:WPF中ItemsControl应用虚拟化时找到子元素的方法  wpf的虚拟化技术会使UI的控件只初始化看的到的子元素, 而不是所有子元素都被初始化,这样会提高UI性能。
1848 0
|
C#
WPF下Itemscontrol分组 样式
原文 WPF下Itemscontrol分组 样式     ...
2260 0
|
20天前
|
C# 开发者 Windows
基于Material Design风格开源、易用、强大的WPF UI控件库
基于Material Design风格开源、易用、强大的WPF UI控件库
|
4月前
|
C#
浅谈WPF之装饰器实现控件锚点
使用过visio的都知道,在绘制流程图时,当选择或鼠标移动到控件时,都会在控件的四周出现锚点,以便于修改大小,移动位置,或连接线等,那此功能是如何实现的呢?在WPF开发中,想要在控件四周实现锚点,可以通过装饰器来实现,今天通过一个简单的小例子,简述如何在WPF开发中,应用装饰器,仅供学习分享使用,如有不足之处,还请指正。
65 1