在wpf中快速展开TreeViewItems

时间:2011-07-05 22:38:28

标签: wpf performance treeview treeviewitem

我知道如何从树视图中扩展所有节点:

<TreeView.ItemContainerStyle>
            <Style TargetType="TreeViewItem">
                <Setter Property="TreeViewItem.IsExpanded" Value="True"/>
            </Style>
 </TreeView.ItemContainerStyle>

唯一的问题是扩展所有节点需要大约一分钟......这可能是因为项目太多了。我怎么能加快这个过程呢?


编辑:

所以我有一个清单:List<ScanItems> MyFilesList

ScanItem是一个具有以下属性的类:FullName,Name,Size,DateCreated,ComparePath以及我需要的其他特定属性,这就是我没有使用FileInfo类的原因。

ScanFile是一个继承自ScanItems的类,所以它就像添加了其他自定义属性一样。

ScanDir是另一个继承自ScanItem的类,它具有以下属性:

public List<ScanItem> items{get;set;}  

我之所以包含该属性的原因是我可以拥有另一个包含项目的列表。

关于如何从文件列表填充树视图,请查看this question

所以现在我希望我能正确解释自己如何将该列表绑定到树视图。

现在让我解释一下我是如何将文件添加到MyFilesList的。我创建了一个递归方法来查找目录中的文件。如果curent目录包含一个文件,则添加一个ScanFile项。如果它包含一个文件夹,则添加一个ScanDir对象并再次调用相同的方法传递ScanDir列表。因此,此过程大约需要8秒钟来扫描外部硬盘驱动器。在该方法执行后,我的列表可能只包含4个项目,但其中一个项目将包含可能包含20个项目的列表等等,就像文件夹可能有5个项目一样,如果这5个项目中的一个恰好是文件夹的文件夹可以有其他物品。

因此,当我执行TreeView.DataContext = MyFilesList时,树视图会在不到一秒的时间内填充。但是当我包括:

<TreeView.ItemContainerStyle>
            <Style TargetType="TreeViewItem">
                <Setter Property="TreeViewItem.IsExpanded" Value="True"/>
            </Style>
 </TreeView.ItemContainerStyle>

树视图中的样式树视图需要很长时间才能加载。

2 个答案:

答案 0 :(得分:2)

您是否尝试过循环遍历treeviewitems并通过设置

“手动”展开它们
IsExpanded = true;

如果这不起作用,那么尝试解决并添加到ScanDir(我认为这是你扩展的唯一类?)属性IsExpanded(或类似的)并绑定到它在你的模板中。不是最好的解决方案,但是如果它可行的话......

答案 1 :(得分:2)

查看Bea Stollnitz关于树状视图和效果的帖子 相关的帖子将是:

她很好地详细解释了您可以尝试的所有选项。太多内容要把它放在这里。