我有一个ListView显示约300项。 当有东西被改变,我需要重新填充列表,我希望滚动位置不变,所以相同的项目仍然可见,并在列表中的相同位置。 “EnsureVisible”方法很糟糕,因为它符合“Visible”,而不是相同的位置(结果是感兴趣的项目总是滚动到列表的底部)。
我对这个问题的解决scheme是保存(我的)“ID”的List-> TopItem,重新填写列表,然后调用List-> TopItem = newItemWithSameID(需要设置两次,出于某种原因工作)。 这对于基本的“未分组”列表来说是一种魅力。
但是 – 如果列表中有“ShowGroups = true”,这是行不通的。 TopItem属性将永远是列表中的第一个项目,而不是文档中所说的第一个VISIBLE项目。
有解决scheme吗? 我search了一下,发现了另一个失去灵魂的同样的问题。 他有一个相当有趣的讨论微软的支持,没有成功。(http://social.msdn.microsoft.com/Forums/en/winforms/thread/8a81c5a6-251c-4bf9-91c5-a937b5cfe9f3)。
所以 – 我的问题是:有没有解决方法? 我真的需要把这个列表分组,当我的列表跳转时,我真的很讨厌。
我不会在这里粘贴任何代码,因为所有需要重现的代码都在上面的讨论中。
非常感谢!
以下是我用于解决此问题的解决方法:
public ListViewItem RealTopItem { int i = 0; while (i < Items.Count && !ClientRectangle.Contains(Items[i].Bounds)) i++; return Items[i]; }
不幸的是,在我的代码中工作了一年之后,最近在while语句中的客户失败了。 在我的故障排除中,我首先尝试关闭组,并且问题消失了。 然后当我再次激活组时,问题再也没有发生。 我不知道现在有什么可能是错的。