0

我想向 TreeListCtrl 的根节点添加 1,000,000 多个条目。因此,我想让它成为“虚拟的”,即就像一个虚拟的 ListCtrl 一样工作,这样它仍然很快,并且由于当前显示的项目是按需加载的,我可以轻松地滚动。但我不能使用虚拟 ListCtrl,因为我还希望能够扩展 1,000,000 个项目中的任何一个以显示其子项(这些项的子项总是少于 50 个)。这可以用 TreeListCtrl 有效地完成吗?还是与不同的班级?根据我自己对 treemixin.VirtualTree 和 wx.gizmos.TreeListCtrl 的实验,重载 OnGetItemText 方法的工作方式与使用普通虚拟 ListCtrl 的方式不同。当用户滚动时,它不会被按需调用,这意味着所有 1,000,

4

3 回答 3

0

我想我要做的是使用虚拟 ListCtrl 以及数据模型的跳过列表。最初,数据模型将包含 100 万个顶层节点。当一个节点展开时,我可以在日志时间内将它的子节点插入到跳过列表中(比数组的线性时间要好得多)。我将在 ListCtrl 中缩进孩子的名字,以便您可以直观地分辨出他们的父母是谁。我认为跳过列表的日志搜索时间(与数组的即时随机访问时间相反)将足够快以处理用户的滚动。如果有人有更好的建议,请告诉我。我将在未来提供关于我的想法是否有效的更新。

于 2010-06-21T18:09:19.027 回答
0

您可能会做的一件事是将子节点留空,然后捕获 expand-node 事件。然后检查是否填充了节点的子节点。如果不是,则在展开节点之前添加它们。如果它们被填充,您只需忽略该事件。

于 2010-06-19T08:13:27.380 回答
0

你是对的,treemixin 并没有使 TreeListCtrl 真正虚拟。我在开发treemixin的时候想过这个问题,但是我不知道如何解决的一件事是当用户查看树深处的项目时,如何知道在项目的左侧绘制哪些线,例如10000到10030. 如果您知道解决方案,我很乐意适应 treemixin。

坦率

作者 treemixin

于 2010-06-19T08:15:57.030 回答