TreeView UI虚拟化无法工作

本文关键字:工作 虚拟化 UI TreeView | 更新日期: 2023-09-27 18:16:32

我得到了大约127K的TreeViewItems,我需要让UI虚拟化工作。

我的XAML

:

<TreeView ScrollViewer.CanContentScroll="True" ItemsSource="{Binding}" VirtualizingPanel.IsVirtualizing="True" VirtualizingPanel.VirtualizationMode="Recycling" Visibility="Hidden" Name="treeView" Margin="10,10,10,0" VerticalAlignment="Top" Grid.Column="0" SelectedItemChanged="treeView_SelectedItemChanged" BorderThickness="0"/>

And My c#:

            treeView.Visibility = Visibility.Visible;
            articleIndexer = OpDb.Articles;
            int count = articleIndexer.GetCount();
            //if (count > 1000)
             //   count = 1000;
            IEnumerable<TBase3.Article> articles = articleIndexer.GetArticles(0, count);
            List<TreeViewItem> items = new List<TreeViewItem>();
            foreach (var article in articles)
            {
                TreeViewItem item1 = new TreeViewItem();
                item1.Header = article.Name;
                item1.Tag = new DbInfo() { RelatedId = article.BlockIndex, DbId = article.Database.Id, IsArticle = true };
                items.Add(item1);
                //treeView.Items.Add(items);
            }
            Items = items;
            treeView.DataContext = Items;

文章计数超过127K,在forearch循环完成后,它确实查看我的TreeViewItems。但是我的GUI是TILT,我需要结束进程来关闭应用程序。所以我猜我的虚拟化不工作是因为GUI没有响应。项目列表

TreeView UI虚拟化无法工作

虚拟化只适用于数据绑定。虽然你在这里做绑定,你仍然在你的视图模型中创建TreeViewItems。这是错误的。TreeView应该决定需要生成多少个TreeViewItem。因此,不要在视图模型中创建TreeViewItems,而是创建一个模型类来表示树节点。并绑定该模型类的集合。

        var list = new List<TreeModel>();
        for (int i = 0; i < 10000; i++)
        {
            var treeModel = new TreeModel();
            treeModel.Header = "Node 1";
            list.Add(treeModel);
        }
        MyTreeView.ItemsSource = list;