繁体   English   中英

WPF虚拟化Treeview中的滚动错误

[英]Scrolling bug in WPF virtualized Treeview

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

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

会发生的是,如果我在第3级扩展子节点并滚动到最后,内容无法正确显示,滚动条“翻转”,我可以继续向下滚动,在更多滚动之后重复该行为。

这仅在虚拟化模式下发生,但遗憾的是由于大量子节点,树视图在非虚拟化模式下的加载时间过长。

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

之前有没有其他人经历过这种奇怪的行为,如果有的话有解决方法吗?

感谢任何输入 - 谢谢!

你有没有试过加载懒惰的物品? 我的意思是你可以首先加载(不虚拟化)只有根节点,然后当这些节点中的每个节点都扩展时加载它的子节点。

在这种情况下,我通常使用TreeViewItemViewModelClass,如:

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

然后在TreeView的ItemContainerStyle中使用TwoWay绑定绑定IsSelected和IsExpanded属性,然后在属性IsExpanded的setter中加载它的所有子节点。

我已经测试了这种方法,理论上树木有超过5000种物品,但从不同时加载所有物品。

希望这可以帮助...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM