wpf - DataGrid 项的静默更新

标签 wpf datagrid scroll wpfdatagrid

我有一个 .NET 4.0 WPF DataGrid,其中包含大约 2,000 个已排序的项目和一个选定的项目。 DataGrid 每 500 毫秒从一个单独的线程更新一次,导致添加和/或删除项目。每次更新后,项目集合都会排序。

问题是,如果选择的项目靠近列表的中间,在多次更新后它经常会离开可见区域。我正在寻找一种在用户不注意的情况下更新 DataGrid 的方法,即将所选项目保持在可见区域的相同位置。

到目前为止,我有 2 个解决这个问题的想法,但没有一个让我感到自豪:

  1. 将更新过程从自动更改为手动,即放置一个带有多个待定更新的 TextArea 和一个“更新”按钮。这是不可取的,因为 我需要与我的产品负责人重新协商。
  2. 在每次更新之前循环遍历项目以获得可见项目的集合(使用 this 方法)并获得所选项目在可见项目中的相对位置。然后运行更新并使用 ScrollIntoView 将所选项目滚动到初始位置。该方法的问题是程序必须每 500 毫秒循环一次所有项目,这对处理器来说是一项相当大的工作量。

我曾经在 WinForms 中使用 TopIndex 属性解决这个问题,但在 WPF 中没有对应的方法。

总而言之,任何关于如何在排序和经常更新的 DataGrid 中添加/删除项目而用户不必追逐感兴趣的项目的想法将不胜感激。

最佳答案

也许您可以看一下 ScrollViewer 及其成员,例如 VerticalOffset、ScrollToVerticalOffset。让我知道是否有帮助

关于wpf - DataGrid 项的静默更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8817572/

相关文章:

wpf - MVVM 和多线程

c# - 从相对路径加载图像

wpf - wpf datagrid 性能问题中的组合框列

c# - DataGrid 每一行中的组合框

wpf - 创建 WPF 混合控件(TreeView + DataGrid = DataTreeGrid)

ios - 如何快速更改 Collection View 的高度

css - 如何包含元素的宽度使其不溢出主体但可见?

c# - 独立应用程序 C#

c# - 在 WPF 中构建可逆的 StackPanel

jquery - jQuery 中对话框的奇怪行为