1

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

<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;}  

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

查看有关如何从文件列表中填充树视图的问题。

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

现在让我解释一下如何将文件添加到 MyFilesList。我创建了一个递归方法来查找目录中的文件。如果当前目录包含一个文件,则添加一个 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>

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

4

2 回答 2

3

看看Bea Stollnitz 发表的关于树视图和性能的帖子。
相关职位将是:

她很好地详细解释了您可以尝试的所有选项。内容太多,这里就不一一列举了。

于 2011-07-08T07:25:12.387 回答
2

您是否尝试过遍历树视图项并通过设置“手动”扩展它们

IsExpanded = true;

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

于 2011-07-08T07:08:49.620 回答