我有一个带有DataGrid
的小型WPF应用程序。当我像这样更新我的dataSource
时:
DataTable myTable = GetNewTableWithChangedRows();
MyGrid.ItemsSource = myTable.DefaultView;
垂直滚动条停留在用户定义的位置,但水平滚动条将其位置重置为零。
区别在哪里?如何使水平滚动条保持在用户定义的位置?
答案 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>