当我更新DataGrid的ItemsSource时,为什么水平滚动条会重置其位置?

时间:2016-10-25 19:56:53

标签: c# wpf scroll datagrid scrollbar

我有一个带有DataGrid的小型WPF应用程序。当我像这样更新我的dataSource时:

DataTable myTable = GetNewTableWithChangedRows();
MyGrid.ItemsSource = myTable.DefaultView;

垂直滚动条停留在用户定义的位置,但水平滚动条将其位置重置为零。

区别在哪里?如何使水平滚动条保持在用户定义的位置?

1 个答案:

答案 0 :(得分:2)

会发生这种情况,因为DataGrid会在更改项目来源时重新生成所有列。将再次计算列宽,因此滚动查看器将重置其水平位置。

垂直位置(和行选择)将按设计维护:Selector将尝试保持当前选择。

如果要保持水平滚动位置不变,则必须阻止自动生成列。这意味着,您必须手动定义DataGrid列:

<DataGrid AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Header 1" Binding="{Binding Column1Value}"/>
        <DataGridTextColumn Header="Header 2" Binding="{Binding Column2Value}"/>
        <!-- ...and so on, for each column you need -->
    </DataGrid.Columns>
</DataGrid>