gpt4 book ai didi

c# - WPF TreeView 和虚拟化(UI 和数据)

转载 作者:行者123 更新时间:2023-11-30 15:06:10 26 4
gpt4 key购买 nike

我有一个层次结构,如下所示:

 class User
{
public List<Contract> Contracts{get;set;}
}

class Contract
{
public List<Group> Groups{get;set;}
}

class Group
{
public List<Article> Articles{get;set;}
}

class Article
{
public string Name{get;set;}
public string Id{get;set;}
}

每个用户都有一些与他相关联的契约(Contract),每个契约(Contract)都有一些与他相关联的组,每个组都有一些文章。

我在 WPF 中使用 TreeView(带有复选框,例如 http://www.codeproject.com/KB/WPF/TreeViewWithCheckBoxes.aspx)直观地表示:

(每个用户单击都会在 TreeView 中显示此结构):

>Contract1
>Group1
>Article1
>Article2
>Article3
>Article4
...
>Group2
>Group3
------------
Add Button
Remove Button
-------------

使用前面的屏幕,用户只需选中并单击“添加”按钮,即可将更多文章、契约(Contract)或组添加到他的帐户中,或者通过单击“删除”按钮将其删除。

问题是每个组中有数万篇文章,我不想一次将它们全部存入内存,因为这样会减慢速度。

你能想出更好的方法来处理这个问题吗?

最佳答案

从 WPF 3.5 SP1 开始有 VirtualizationMode.Recycling虚拟化模式,允许重复使用项目容器,并且不会在用户每次滚动项目控件时创建新容器。

When VirtualizationMode is set to Recycling, the VirtualizingStackPanel reuses item containers instead of creating a new one each time.

尝试一下

<TreeView
VirtualizingStackPanel.IsVirtualizing = "True"
VirtualizingStackPanel.VirtualizationMode = "Recycling" />

要使其适用于 TreeView,请参阅此 SO 帖子:(我不会复制/粘贴 XAML) VirtualizingStackPanel on a Treeview ist not Virtualizing

有用的 MSDN 链接:

关于c# - WPF TreeView 和虚拟化(UI 和数据),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8183171/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com