【问题标题】:WPF DataGrid - maintain scroll position after refreshWPF DataGrid - 刷新后保持滚动位置
【发布时间】:2012-10-21 14:40:44
【问题描述】:

有谁知道刷新命令后如何保持垂直滚动位置?

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

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

【问题讨论】:

  • 你能举个例子吗?我设置了一个简单的 WPF DataGrid,当我更改 ItemsSource 和/或触发 Items.Refresh() 时,垂直滚动位置似乎保持不变。

标签: wpf datagrid scroll refresh wpfdatagrid


【解决方案1】:

2 种可能的解决方案:

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

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

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

【讨论】:

【解决方案2】:

我遇到了同样的问题,这就是我所做的:

  1. 找到你的Datagrid/ListBoxScrollViewer,当它被引导并添加一个ScrollChanged事件:
var scrollViewer = FindScrollViewer(ListBoxOrders);
if (scrollViewer != null)
{
    scrollViewer.ScrollChanged += scrollViewer_ScrollChanged;
}
//Here is the function to find the ScrollViewer:
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;
}
  1. 刷新后,滚动到上一个位置:
scrollViewer?.ScrollToVerticalOffset(_verticalOffset);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-12
    • 2011-07-31
    • 1970-01-01
    • 2020-02-29
    • 2011-04-09
    • 2021-07-07
    • 2011-07-05
    相关资源
    最近更新 更多