滚动WPF虚拟化Treeview中的错误
我在WPF中使用虚拟化树视图来显示具有更多子节点(5000+)的3级深层次结构。
...
会发生的是,如果我在第3级扩展子节点并滚动到最后,内容无法正确显示,滚动条“翻转”,我可以继续向下滚动,在更多滚动之后重复该行为。
这仅在虚拟化模式下发生,但遗憾的是由于大量子节点,树视图在非虚拟化模式下的加载时间过长。
我在这里阅读了SO上的以下链接以及MSDN论坛上的原始post,但是在SelectedItemChanged处理程序中调用UpdateLayout()
的建议解决方法对我不起作用。
之前有没有其他人经历过这种奇怪的行为,如果是的话有解决方法吗?
感谢任何输入 – 谢谢!
你有没有试过加载懒惰的物品? 我的意思是你可以首先加载(不虚拟化)只有根节点,然后当这些节点中的每个节点都被扩展时加载它的子节点。
在这种情况下,我通常使用TreeViewItemViewModelClass,如:
public class TreeViewItemViewModel : INotifyPropertyChanged { public IEnumerable Childs { get; } public bool IsSelected { get; set; } public bool IsExpanded { get; set; } (...) }
然后在TreeView的ItemContainerStyle中使用TwoWay绑定绑定IsSelected和IsExpanded属性,然后在属性IsExpanded的setter中加载它的所有子节点。
我已经测试了这种方法,理论上树木有超过5000种物品,但从不同时加载所有物品。
希望这可以帮助…