2011-11-18 57 views
1

每當我更改ItemsSource(或它觸發集合重置)時,WPF不會將ListView/DataGrid的滾動條位置重置爲頂部。如果有一種很好的手動方式,這沒什麼大不了的,但似乎沒有。重置ItemsSource上的滾動條更改

目前我做的:

ScrollViewer.ScrollToTop(); 
ScrollViewer.UpdateLayout(); 
Grid.ItemsSource = Data; 

這是造成因爲UpdateLayout請一些閃爍第一重繪控制。

另一種方式是做:

Grid.ItemsSource = Data; 
ScrollViewer.ScrollToTop(); 

這似乎並沒有引起任何閃爍,但由於更改後的ItemsSource滾動位置時,它會導致WPF首先遍歷了錯誤的物品在ItemsSource中,在它獲得正確的項目(偏移量爲0)之前。由於集合是虛擬化的,因此會導致不必顯示的項目的不必要的SQL查詢。

是否有另外一種方法可以不閃爍或首先檢索錯誤的項目?

回答

0

只是附着在控制這一事件,將持有的集合:

假設它是一個列表框:

lstItems.SourceUpdated += new EventHandler<DataTransferEventArgs>(lstItems_SourceUpdated); 

然後,你將有一個看起來像這樣的事件。

void lstItems_SourceUpdated(object sender, DataTransferEventArgs e) 
    { 
     ScrollViewerName.ScrollToTop(); 
    }