【发布时间】:2012-01-11 10:16:07
【问题描述】:
我有一个 .NET 4.0 WPF DataGrid,其中包含大约 2,000 个排序项和一个选定项。 DataGrid 每 500 毫秒从一个单独的线程更新一次,从而导致添加和/或删除项目。每次更新后,项目集合都会被排序。
问题在于,如果选定的项目靠近列表的中间,它通常会在几次更新后远离可见区域。我正在寻找一种在用户不注意的情况下更新 DataGrid 的方法,即将所选项目保持在可见区域中的相同位置。
到目前为止,我有 2 个想法来解决这个问题,但没有一个让我感到自豪:
- 将更新过程从自动更改为手动,即放置一个带有许多待处理更新的 TextArea 和一个“更新”按钮。这是不可取的,因为 我需要与我的产品负责人重新协商。
- 在每次更新之前循环遍历项目以获取可见项目的集合(使用this 方法)并获取所选项目在可见项目中的相对位置。然后运行更新并使用
ScrollIntoView将所选项目滚动到初始位置。这种做法的问题在于,程序必须每 500 毫秒循环一次所有项目,这对处理器来说是相当大的工作量。
我以前在 WinForms 中使用 TopIndex 属性解决了这个问题,但在 WPF 中没有等效的。
总而言之,任何关于如何在已排序且经常更新的 DataGrid 中添加/删除项目而无需用户追逐感兴趣的项目的想法将不胜感激。
【问题讨论】:
标签: wpf datagrid scroll wpfdatagrid