【发布时间】:2012-07-23 07:17:17
【问题描述】:
我正在尝试为分层控件实现一个虚拟化集合,类似于this article 中提供的常规控件。
文章中提出的解决方案在很大程度上依赖于以下行为(来自文章):
当
ItemsControl绑定到IList实现时,而不是IEnumerable实现,它不会枚举整个列表, 而是只访问显示所需的项目。它使用Count属性判断集合的大小,大概是为了 设置滚动范围。然后它将遍历屏幕 使用列表索引器的项目。因此,可以创建一个IList可以报告有大量项目,但实际上只有 需要时取回物品。
我发现虽然ListBox 有这种行为,但TreeView(也是ItemsControl)的行为并非如此,并且无论是否显示所有项目都始终被请求屏幕。
那么,这是特定于 ListBox 而不是每个 ItemsControl 的行为还是 WPF 的 TreeView 中的错误?
我也无法在 MSDN 上找到任何提及此行为的内容,因此如果有人发现它记录在任何我想知道的地方。
【问题讨论】:
-
在 ItemsControl.ItemsPanel 的 Remarks 部分中,它说 ListBox 的默认 ItemsPanel 是 VirtualizingStackPanel,而 here MSDN 说 TreeView 的默认 ItemsPanel 是普通的 StackPanel。
-
@Clemens 即使将
TreeView.ItemsPanel设置为VirtualizingStackPanel并使用VirtualizingStackPanel.IsVirtualizing="True"开启虚拟化,也会发生这种情况。 -
好的,您可以在问题中提到这一点。
标签: wpf virtualization itemscontrol ilist itemssource