0

由于数据集的大小,我有一个使用虚拟化的 WPF 树视图控件。层次结构是客户 -> 帐户 -> 交易,其中包含 150 个客户的示例数据集,其中大多数只有一个帐户和交易,但四个有 8000 个交易。

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

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

第一次搜索交易时,它工作正常。第二次对于不同的事务 ID,它会冻结。如果您先尝试搜索第二个 ID,它可以正常工作,但总是在您尝试两次操作时失败。

我真的不明白 WPF 在幕后做了什么,但我猜我的代码正在生成容器,这些容器会累积并最终导致代码崩溃,因为代码太多了。当我在调试器中中断所有操作时,它似乎一直在不断地检索每个 Transaction 对象的绑定依赖项属性,所以不知道为什么当可视区域中只有 30 个时它试图获取这么多的依赖项属性,它似乎只是试图检索每一个。

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

谢谢

4

1 回答 1

0

您可以使用 ICollectionView 通过将 TreeView 的 Itemsource 绑定到集合视图来对树视图进行搜索,如下所示

 ICollectionView defaultView = CollectionViewSource.GetDefaultView(treeView.ItemsSource);
 defaultView.Filter += delegate(object item)
 {
    string searchString = searchTextBox.Text;
 }

链接以获得更多帮助

又一参考

于 2013-01-29T11:26:17.297 回答