首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WPF TreeView慢加载

WPF TreeView慢加载
EN

Stack Overflow用户
提问于 2017-04-27 21:18:21
回答 1查看 1.2K关注 0票数 0

我有这样的树景

代码语言:javascript
复制
<TreeView x:Name="tvFolders" 
  ItemsSource="{Binding TreeItems}" 
  Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2"
  BorderBrush="{StaticResource ColligoBorderLightBrush}"
  IsTextSearchCaseSensitive="False" 
  IsTextSearchEnabled="True"
  VirtualizingPanel.VirtualizationMode="Recycling"
  VirtualizingPanel.IsVirtualizing="True"
  Loaded="tvFolders_Loaded">

</TreeView>

绑定TreeItems是一个ObservableCollection。

如果这棵树不是很大,这是很好的工作,但如果我有许多文件夹/子文件夹结构,它可能需要10秒左右,直到它加载。

我如何解决这个问题,这样树才能建得更快?

EN

Stack Overflow用户

回答已采纳

发布于 2017-04-28 18:08:59

可以像下面提到的那样完成延迟加载。因为张贴任何链接都不是很好的做法。我张贴的链接以及代码内容在链接中。

我从这里弄到的。http://www.wpf-tutorial.com/treeview-control/lazy-loading-treeview-items/

代码语言:javascript
复制
 <Grid>
    <TreeView Name="trvStructure" TreeViewItem.Expanded="TreeViewItem_Expanded" Margin="10" />
</Grid>

 public partial class LazyLoadingSample : Window
    {
            public LazyLoadingSample()
            {
                    InitializeComponent();
                    DriveInfo[] drives = DriveInfo.GetDrives();
                    foreach(DriveInfo driveInfo in drives)
                            trvStructure.Items.Add(CreateTreeItem(driveInfo));
            }

            public void TreeViewItem_Expanded(object sender, RoutedEventArgs e)
            {
                    TreeViewItem item = e.Source as TreeViewItem;
                    if((item.Items.Count == 1) && (item.Items[0] is string))
                    {
                            item.Items.Clear();

                            DirectoryInfo expandedDir = null;
                            if(item.Tag is DriveInfo)
                                    expandedDir = (item.Tag as DriveInfo).RootDirectory;
                            if(item.Tag is DirectoryInfo)
                                    expandedDir = (item.Tag as DirectoryInfo);
                            try
                            {
                                    foreach(DirectoryInfo subDir in expandedDir.GetDirectories())
                                            item.Items.Add(CreateTreeItem(subDir));
                            }
                            catch { }
                    }
            }

            private TreeViewItem CreateTreeItem(object o)
            {
                    TreeViewItem item = new TreeViewItem();
                    item.Header = o.ToString();
                    item.Tag = o;
                    item.Items.Add("Loading...");
                    return item;
            }
    }
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43668074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档