WPF treeview使用MVVM冻结进入视图

WPF treeview使用MVVM冻结进入视图,wpf,mvvm,treeview,Wpf,Mvvm,Treeview,我有一个WPF treeview控件,由于数据集的大小,它使用虚拟化。该层次结构是Customer->Account->Transaction,示例数据集有150个客户,其中大多数客户只有一个帐户和事务,但有四个客户有8000个事务 我需要有搜索功能来输入事务id并在树状视图中导航到该位置。目前我使用的是MVVM模型,因此搜索事务非常简单,当我返回节点ViewModel时,我只需调用SelectThis(),它就可以正常工作。但问题是它不会将所选节点带入可视区域 我有一个函数,它接受ViewMo

我有一个WPF treeview控件,由于数据集的大小,它使用虚拟化。该层次结构是Customer->Account->Transaction,示例数据集有150个客户,其中大多数客户只有一个帐户和事务,但有四个客户有8000个事务

我需要有搜索功能来输入事务id并在树状视图中导航到该位置。目前我使用的是MVVM模型,因此搜索事务非常简单,当我返回节点ViewModel时,我只需调用SelectThis(),它就可以正常工作。但问题是它不会将所选节点带入可视区域

我有一个函数,它接受ViewModel对象并遍历TreeView,直到找到包含ViewModel的TreeView项,它生成容器,然后在TreeView项上调用BringIntoView()

第一次搜索事务时,它工作正常。第二次对于不同的事务ID,它将冻结。如果您首先尝试搜索第二个ID,它工作正常,当您尝试该操作两次时总是失败

我真的不明白WPF在幕后做了什么,但我猜我的代码在生成容器方面做了一些事情,这些容器会不断累积,最终导致代码崩溃,因为太多了。当我在调试器中打破所有设置时,它似乎一直在为每个事务对象检索绑定的依赖项属性,所以不确定为什么在可视区域中只有30个时它会尝试获取这么多属性,它似乎只是在尝试检索每一个

在搜索事务的调用之间是否有一种方法可以清除TreeView控件中所有生成的UI容器和对象,并将其重置为已卸载,以便每次搜索都从零开始生成容器


谢谢

您可以使用ICollectionView通过将treeview的Itemsource绑定到collection视图在treeview上进行搜索,如下所示

 ICollectionView defaultView = CollectionViewSource.GetDefaultView(treeView.ItemsSource);
 defaultView.Filter += delegate(object item)
 {
    string searchString = searchTextBox.Text;
 }
寻求进一步帮助

再来一次