2012-01-11 62 views
3

我有一個.NET 4.0 WPF DataGrid約2000分類項目和一個選定的項目。 DataGrid每隔500毫秒從一個單獨的線程更新,導致項目被添加和/或刪除。每次更新後,物品的集合都會被排序。無聲更新DataGrid項目

問題是,如果所選項目靠近列表的中間位置,則在多次更新後,它通常會從可見區域消失。我正在尋找一種方法來更新DataGrid,而用戶不會注意到它,即將選定的項目保留在可見區域中的相同位置。

到目前爲止,我有2個想法如何解決這個問題,但他們沒有讓我感到自豪:

  1. 變化,從自動到手動,即在更新過程中把一個文本區域與多個掛起的更新和一個「更新」按鈕。這是不可取的,因爲 我需要重新與我的產品所有者協商。
  2. 在每次更新前循環播放項目以獲取可見項目的集合(使用this方法),並獲取可見項目中所選項目的相對位置。然後運行更新並使用ScrollIntoView將選定項目滾動到初始位置。這個問題在於,程序必須每500毫秒循環所有項目,這對於處理器來說是相當多的工作。

我曾經在WinForms中通過使用TopIndex屬性解決了這個問題,但在WPF中沒有它的等價物。總而言之,關於如何在不需要用戶追蹤感興趣的項目的情況下添加/刪除已排序和頻繁更新的DataGrid中的項目的任何想法都將不勝感激。

回答

3

也許你可以看看ScrollViewer及其成員,如VerticalOffset,ScrollToVerticalOffset。讓我知道,如果它有幫助

+1

+1:我也建議。記住最後一個位置,並在更新後滾動到最後一個已知的位置... – SvenG 2012-01-11 14:42:48

+0

這是輝煌的,正是我一直在尋找的。謝謝你,男士們。 – Pavel 2012-01-12 09:25:46