2010-11-02 103 views
4

我在WPF中使用虚拟树视图来显示具有更多数量的子节点(5000+)的3级深层次结构。在WPF虚拟化Treeview滚动错误

<TreeView Grid.Row="0" Grid.Column="0" Name="TestTree" ItemsSource="{Binding}" VirtualizingStackPanel.IsVirtualizing="True"> 
... 
</TreeView> 

会发生什么,如果我展开的子节点上的第三级,并滚动到最后的内容无法正确显示,这个滚动条“翻转回来”,我可以继续向下滚动永远,在更多滚动之后重复该行为。

这只发生在虚拟化模式下,但不幸的是,由于大量的子节点,treeview在非虚拟化模式下的加载时间过长。

我已阅读MSDN论坛here但在SelectedItemChanged处理程序调用UpdateLayout()我没有工作的建议的解决方法上SO here以下链接和原来的线程。

以前有没有人遇到过这种奇怪的行为,如果有的话是否有解决方法?

感谢任何意见 - 谢谢!

回答

0

您是否尝试加载项目懒?我的意思是,你可以首先加载(不虚拟化)只有根节点,然后当这些节点中的每一个扩展加载它的孩子。

我通常在这种情况下使用TreeViewItemViewModelClass,是这样的:

public class TreeViewItemViewModel : INotifyPropertyChanged 
{ 
    public IEnumerable<TreeViewItemViewModel> Childs { get; } 
    public bool IsSelected { get; set; } 
    public bool IsExpanded { get; set; } 
    (...) 
} 

,然后用双向绑定绑定的IsSelected和IsExpanded propertires TreeView中的ItemContainerStyle,然后在的二传手财产IsExpanded你加载所有的孩子。

我已经测试了这种方法,其中理论上有超过5000个项目但从未同时加载所有项目的树木。

希望这有助于...

+0

的问题是,大部分的节点都在同一水平上,所以这种优化不会真的给我买任何东西,因为我会在同一时间加载所有这些节点无论如何。 – BrokenGlass 2011-06-02 19:45:28