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没有响应。项目列表
虚拟化只适用于数据绑定。虽然你在这里做绑定,你仍然在你的视图模型中创建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;