我正在使用 WPF MVVM 解决方案,其中我有一个每秒更新多次的网格。我需要允许用户能够向下滚动网格一半并在网格数据更新之间保持在那里。现在,如果我向下滚动网格,下次网格数据更新时,滚动条位置将跳回到顶部。
即使在处理更新时,如何才能将滚动条的 x 位置保持在当前位置。请告诉我。
您是否在更新中替换/重置数据网格绑定到的集合,或者是否正在修改该集合?我相信如果您执行 myCollection = UpdatedCollection 之类的操作而不是使用 myCollection.Add(x) 和 myCollection.Remove(x) 修改集合,网格将会重置
<ListBox ScrollViewer.VerticalScrollBarVisibility="Visible"
ScrollViewer.CanContentScroll="False"/>
应该可以解决这个问题。 原因通常是 ListView 总是转到最后一个选定的元素。 此外,您还需要确保列表是通过绑定填充的。
只需保存滚动条位置:
private void Loaded(object sender, System.Windows.RoutedEventArgs e)
{
var border = (Border)VisualTreeHelper.GetChild(DataGridControlName, 0);
_scrollViewer = (ScrollViewer)VisualTreeHelper.GetChild(border, 0);
}
// save
_scrollViewerVOffset = _scrollViewer?.VerticalOffset ?? 0;
// restore
Dispatcher.Invoke(() => _scrollViewer?.ScrollToVerticalOffset(_scrollViewerVOffset));