我有一个层次结构,如下所示:
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;}
}
Run Code Online (Sandbox Code Playgroud)
每个用户都有一些与他相关的合同,每个合同都有一些与他相关的团体,每个团体都有一些文章.
我在WPF中使用TreeView(带有http://www.codeproject.com/KB/WPF/TreeViewWithCheckBoxes.aspx中的复选框)直观地表示这个:
(单击每个用户在TreeView中显示此结构):
>Contract1
>Group1
>Article1
>Article2
>Article3
>Article4
...
>Group2
>Group3
------------
Add Button
Remove Button
-------------
Run Code Online (Sandbox Code Playgroud)
使用先前屏幕,用户可以通过选中它们并单击"添加"按钮或通过单击"删除按钮"将其删除来向其帐户添加其他文章或合同或组.
问题是每个小组都有成千上万的文章,我不想立刻将它们全部记在内存中,因为它会减慢速度.
你能想到更好的处理方法吗?
由于WPF 3.5 SP1存在VirtualizationMode.Recycling虚拟化模式,它允许重用项容器,并且每次用户滚动Items Control时都不会创建新的容器.
当VirtualizationMode设置为Recycling时,VirtualizingStackPanel会重复使用项容器,而不是每次都创建一个新容器.
试用
<TreeView
VirtualizingStackPanel.IsVirtualizing = "True"
VirtualizingStackPanel.VirtualizationMode = "Recycling" />
Run Code Online (Sandbox Code Playgroud)
为了使它适用于TreeView,请看这个SO帖子:( 我不会复制/粘贴XAML) Treeview上的VirtualizingStackPanel不是虚拟化
有用的MSDN链接:
| 归档时间: |
|
| 查看次数: |
5751 次 |
| 最近记录: |