Wpf树形列表控件

Wpf树形列表控件_第1张图片

TreeList
TreeList的职责是读取一棵树的根节点,然后把整棵树(下称“数据树”)转换成一个列表,通过Items属性提供给DataGrid。并且TreeList要负责跟踪数据树的节点的增删情况,实时维护Items集合,以便数据树的变化能在DataGrid上反映出来。
TreeList独立完成这项工作比较困难,原因在于:每个数据树上的节点(下称“数据节点”)显示到表格中时,表格需要知道节点的一些信息,例如
节点在树的第几层,以便计算缩进量,节点当前是展开的还是没有展开,节点在表格中是可见还是不可见(可不可见取决于父节点一直到根节点的路径上是不是都是展开状态)
而对数据节点的类型没有过多限定,因此假设数据节点自己不知道上述信息,不提供展开、收起这样的操作,甚至都没有一个Parent属性用于导航到自己的父节点。并且:数据节点可能是可复用的,一个节点实例可能出现在多个父节点下,而在视图上,这些节点处于不同的位置,有的展开了,有的没展开……所有这些复杂性都需要TreeList来处理。
为了减轻TreeList的工作,创建了TreeItem节点。

TreeItem
TreeItem是是对单个数据节点的封装。它封装数据节点,并且提供数据节点本身不具备的但和视图显示密切相关的属性,例如节点在树的第几层、节点是否是展开的,节点在视图上当前是否可见等,还提供了了展开、收起等视图层面的操作。

TreeItem自身带有Parent和Children属性,能够自组织成一棵树(下称视图结构树)。逻辑上,这棵树的结构与数据源完全对等,但实际处理上会有一些变通,仅用户访问到的数据节点才会构造对应的TreeItem。

为了能反映数据源的节点的变动情况,TreeItem会侦听它的数据节点的子节点变化情况,并更新自身的子节点。并且确定这个更新是否有必要通知到TreeList。TreeItem还负责在执行展开操作之前,通知TreeList产生“某节点将要展开”的事件,因为可能要通知外部程序先行加载数据节点的子节点。

你可能感兴趣的:(wpf)