我使用MVVM作为我的WPF架构,并且我将WPF TreeView实现为延迟加载(在扩展之前不会递归加载子项。)
但是,我需要在扩展时实现异步加载。有没有办法做到这一点?我需要将其保持在控制级别而不是代码隐藏/应用程序级别。
由于
答案 0 :(得分:2)
为什么需要在控件本身中实现它?
假设这不是绝对要求,我将在返回指定节点的子节点的属性中处理此问题。如果尚未填充子项,请使用后台线程加载子项,并在找到它们时通知UI线程,然后将子对象添加到子项集合中。假设您正在使用ObservableCollection
(或至少是一个实现INotifyCollectionChanged
的集合),则在添加子项时,它们将异步显示在UI中。
答案 1 :(得分:0)
如果您使用延迟加载和HierarchicalDataTemplates,则只会获得您选择加载的项目。请记住,TreeView需要加载一个低于它显示的级别,以确定它是否应该显示Expand / Collapse Toggle按钮
答案 2 :(得分:0)
以下是如何执行此操作:
这可以防止TreeViewItem在扩展之前设置其ItemsSource。创建这个机制是一些工作,但是一旦创建它,您可以通过简单地从HierarchicalDataTemplate中删除ItemsSource并在ItemContainerStyle中设置它来进行任何TreeView延迟加载。
答案 3 :(得分:-3)
对于需要延迟加载的每个UI元素,我使用了“查看GUID”。
示例说明: