【发布时间】:2013-01-29 19:26:17
【问题描述】:
由于我的数据集的大小,我有一个使用虚拟化的 WPF 树视图控件。层次结构是 Customer -> Account -> Transaction,其中包含 150 个客户的示例数据集,其中大多数只有一个帐户和交易,但四个有 8000 个交易。
我需要具有搜索功能才能输入交易 ID 并导航到树视图中的那个位置。目前我正在使用 MVVM 模型,因此搜索事务是微不足道的,当我返回节点 ViewModel 时,我可以调用 SelectThis() 并且它工作正常。但问题是它不会将选定的节点带入可视区域。
我有一个函数,它接受一个 ViewModel 对象并遍历 TreeView,直到找到包含 ViewModel 的 TreeViewItem,它生成容器,然后在 TreeViewItem 上调用 BringIntoView()。
第一次搜索交易时,它可以正常工作。第二次对于不同的事务 ID,它会冻结。如果您先尝试搜索第二个 ID,它可以正常工作,但总是在您尝试两次操作时失败。
我真的不明白 WPF 在幕后做了什么,但我猜我的代码正在生成容器,这些容器会累积并最终导致代码崩溃,因为太多了。当我在调试器中中断所有操作时,它似乎一直在不断地检索每个 Transaction 对象的绑定依赖项属性,所以不知道为什么当可视区域中只有 30 个时它试图获取这么多的依赖项属性,它似乎只是试图检索每一个。
在调用 Search for Transaction 之间是否有一种方法可以清除 TreeView 控件中所有生成的 UI 容器和对象并将其重置为已卸载,以便每次搜索都从头开始生成容器?
谢谢
【问题讨论】: