1

我使用 WPF 树视图,其中包含许多项目,例如 1000。树视图将加载非常缓慢,所以我从下一个链接遵循微软的建议:

http://msdn.microsoft.com/en-us/library/cc716882.aspx

我将 VirtualizingStackPanel.IsVirtualizing 设置为“True”,将 VirtualizingStackPanel.VirtualizationMode 设置为“Recycling”。现在treeview的性能非常好,但是出现了一个问题。

当我想在树视图中找到可见节点之外的一个节点时,TreeViewItem 将为空。例如,当树视图位于底部时,我想在树视图的顶部找到一个节点。在搜索节点并显示需要显示的节点后,我希望树视图自动滚动到顶部。我怎么能这样做?

衷心感谢您的帮助!</p>

4

2 回答 2

1

由于Virtualization适用on于您的 TreeView,itemcontainers因此不会为不可见的对象生成 (treeViewItem)。这就是为什么您的 treeviewItem 为空。

如果你想获得treeViewItem,你需要以某种方式为底层对象生成容器,你可以通过调用BringIntoView方法来完成。

详细的解释可以在MSDN上找到示例。

于 2013-11-02T08:38:18.117 回答
0

实际上VirtualizingStackPanel不会连续加载元素。相反,它重用现有元素并替换它们后面的DataContext 。例如,如果您有一个包含 1000 个项目的VirtualizingStackPanel,一次只能看到 20 个,但实际上它为滚动缓冲区渲染了更多的项目。

例如,在您的情况下,您会看到 20 个项目和 5 个额外项目用于滚动缓冲区。当您滚动时,那些 20+5 个控件后面的DataContext会发生变化,但实际的控件本身永远不会被替换。

如果您执行类似在TreeViewItem #1中输入Value的操作,并且TreeViewItem.Value未绑定到任何内容,则 Value 将始终显示,因为控件正在被重用。如果将TreeViewItem.Value绑定到一个值,则DataContext将在您滚动时更改,这将替换显示的Value

于 2013-11-02T13:31:53.963 回答