Wpf树形列表控件

在这里插入图片描述

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值