WPF DataGrid - 刷新后保持滚动位置

时间:2012-11-01 01:31:49

标签: wpf datagrid scroll refresh wpfdatagrid

任何人都知道如何在刷新命令后保持垂直滚动位置?

我的Datagrid从对象列表中接收绑定。

非常感谢,对不起我的英语。

2 个答案:

答案 0 :(得分:0)

2个可行的解决方案:

1)尝试更新列表而不是替换它。它意味着添加新项目并删除您不需要的项目。

2)您可以在刷新前保存滚动条的状态,然后将程序滚动到所选项目。

WPF Toolkit: how to scroll datagrid to show selected item from code behind?

答案 1 :(得分:0)

我遇到了同样的问题,这是我所做的: 1.在您的数据网格/列表框处于引导状态时,找到它的滚动查看器,并添加一个scrollchanged事件。

var scrollViewer = FindScrollViewer(ListBoxOrders);
if (scrollViewer != null)
{
    scrollViewer.ScrollChanged += scrollViewer_ScrollChanged;
}

以下是查找滚动查看器的功能:

    private ScrollViewer FindScrollViewer(DependencyObject d)
{
    if (d is ScrollViewer)
        return d as ScrollViewer;

    for (int i = 0; i < VisualTreeHelper.GetChildrenCount(d); i++)
    {
        var sw = FindScrollViewer(VisualTreeHelper.GetChild(d, i));
        if (sw != null) return sw;
    }
    return null;
}
  1. 更改滚动时,存储垂直偏移

    private double _verticalOffset; private void scrollViewer_ScrollChanged(object sender, ScrollChangedEventArgs e) { var sv = (ScrollViewer)sender; _verticalOffset = sv.VerticalOffset; }

  2. 刷新后,滚动到上一个位置

    scrollViewer?.ScrollToVerticalOffset(_verticalOffset);