DataGrid 项目的静默更新

发布于 2024-12-26 06:40:45 字数 777 浏览 0 评论 0原文

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

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

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

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

我曾经在 WinForms 中通过使用 TopIndex 属性来解决这个问题,但在 WPF 中没有等效的方法。

总而言之,任何有关如何在排序且频繁更新的 DataGrid 中添加/删除项目而无需用户必须追逐感兴趣的项目的想法都将受到高度赞赏。

I have a .NET 4.0 WPF DataGrid with about 2,000 sorted items and one selected item. The DataGrid is updated every 500 ms from a separate thread causing the items to be added and/or removed. After each update the collection of items gets sorted.

The problem is that if the selected item is near the middle of the list, it often goes away from a visible area after several updates. I am looking for a way to update the DataGrid without a user noticing it, i.e. keep the selected item on the same position in the visible area.

So far I have 2 ideas how to work around this problem, but none of them makes me proud:

  1. Change the updating process from automatic to manual, i.e. put a TextArea with a number of pending updates and an "Update" button. This is not desirable, since
    I would need to re-negotiate with my product owner.
  2. Loop through the items before each update to get a collection of visible items (using this approach) and get a relative position of the selected item within the visible items. Then run the updates and scroll the selected item into the initial position using ScrollIntoView. The problem with that uproach is that the program will have to loop through all items every 500 ms, which is quite a lot of work for a processor.

I used to solve this problem in WinForms by using TopIndex property, but there is no equivalent of it in WPF.

To sum up, any ideas about how it is possible to add/delete items in a sorted and frequently updated DataGrid without a user having to chase an item of interest will be much appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

感受沵的脚步 2025-01-02 06:40:45

也许您可以看看 ScrollViewer 及其成员,例如 VerticalOffset、ScrollToVerticalOffset。如果有帮助请告诉我

Maybe you could take a look to the ScrollViewer and its members like VerticalOffset, ScrollToVerticalOffset. Let me know if it helps

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文