我在 WPF 中使用虚拟化树视图来显示具有大量子节点(5000+)的 3 级深度层次结构。
<TreeView Grid.Row="0" Grid.Column="0" Name="TestTree" ItemsSource="{Binding}" VirtualizingStackPanel.IsVirtualizing="True">
...
</TreeView>
发生的情况是,如果我展开第三层的子节点并滚动到最后,内容将无法正确显示,并且滚动器“翻转回来”,我可以继续向下滚动,在更多滚动后重复该行为。
这种情况仅发生在虚拟化模式下,但不幸的是,由于子节点数量较多,非虚拟化模式下树视图的加载时间令人望而却步。
我已阅读以下链接here以及 MSDN 论坛上的原始帖子here但建议的解决方法是调用UpdateLayout()
在 SelectedItemChanged 处理程序中对我不起作用。
以前是否有其他人经历过这种奇怪的行为,如果有的话有解决方法吗?
感谢任何意见 - 谢谢!
您是否尝试过惰性加载项目?我的意思是,您可以首先(不虚拟化)仅加载根节点,然后当每个节点展开时加载它的子节点。
在这种情况下,我通常使用 TreeViewItemViewModelClass,例如:
public class TreeViewItemViewModel : INotifyPropertyChanged
{
public IEnumerable<TreeViewItemViewModel> Childs { get; }
public bool IsSelected { get; set; }
public bool IsExpanded { get; set; }
(...)
}
然后在具有 TwoWay 绑定的 TreeView 的 ItemContainerStyle 中绑定 IsSelected 和 IsExpanded 属性,然后在属性 IsExpanded 的 setter 中加载其所有子项。
我已经测试了这种方法,树理论上有超过 5000 个项目,但从未同时加载所有项目。
希望这可以帮助...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)