更改Filter时,防止ListViewItem上的ContextMenu消失

时间:2011-08-15 21:27:15

标签: c# wpf contextmenu listviewitem

我有一个ListView和TextBox用于输入搜索文本。

当用户搜索某些文本时,我开始长时间运行的搜索操作(在UI线程上,通过UI线程计时器),并且一次又一次地,当搜索仍处于活动状态时,我改变了ICollectionView.Filter属性,用于使ListView刷新并显示搜索找到的匹配项目。

问题在于,如果用户右键单击其中一个项目,然后在后台进行搜索,则刷新树,然后ContextMenu消失。

如何防止这种情况发生?

1 个答案:

答案 0 :(得分:1)

这是我的理论: 因为刷新了整个树,所以WPF无法知道项目(右键单击)与刷新后的项目完全相同。从技术上讲,该项目甚至不再“存在”。它实际上是一个具有完全相同属性的新项目(从ListView的角度来看)。

有一些方法可以尝试修复此问题:

  • 捕获项目的右键,存储项目;捕获树刷新,检查项目是否等于存储的项目;如果相等则显示ContextMenu。

  • 不是刷新整个树,而是将项目添加到列表的末尾。

  • 在ContextMenu打开时,暂停刷新树。