gpt4 book ai didi

c# - WPF 虚拟化 Treeview 中的滚动错误

转载 作者:行者123 更新时间:2023-11-30 13:05:34 25 4
gpt4 key购买 nike

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

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

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

这只发生在虚拟化模式下,但不幸的是,由于子节点数量众多,非虚拟化模式下 TreeView 的加载时间令人望而却步。

我已阅读 SO here 上的以下链接和 MSDN 论坛上的原始主题 here但是建议的在 SelectedItemChanged 处理程序中调用 UpdateLayout() 的解决方法对我不起作用。

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

感谢任何意见 - 谢谢!

最佳答案

您是否尝试过延迟加载项目??我的意思是,您可以首先(不虚拟化)仅加载根节点,然后当这些节点中的每一个都被扩展时加载它的子节点。

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

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

然后在具有双向绑定(bind)的 TreeView 的 ItemContainerStyle 中绑定(bind) IsSelected 和 IsExpanded 属性,然后在属性 IsExpanded 的 setter 中加载它的所有子项。

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

希望这有助于...

关于c# - WPF 虚拟化 Treeview 中的滚动错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4074475/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com