我在WPFDataGrid
中显示了几千行,但希望在加载时自动滚动到特定行(稍后还会添加一个滚动到该特定行的按钮(。是否可以通过数据绑定或从视图模型属性实现?
当然,我已经浏览过互联网,但找不到任何相应的属性。。例如,SelectedCells
只有一个get
访问器(但我认为它无论如何都不会滚动(。我认为SelectedItem
等其他属性没有帮助。
感谢您的任何见解:-(
有两个选项:滚动到一行而不选择,滚动到一行将选择。
滚动到行而不选择
此解决方案适用于任何DataGrid.SelectionUnit
值(基于单元格或行的选择(。
您可以从视图模型中的属性设置行,该属性绑定到DataGrid.CurrentItem
。
滚动必须由DataGrid
通过处理DataGrid.CurrentCellChanged
事件来处理。
视图模型(必须实现INotifyPropertyChanged
(
object currentRow = this.DataSource[currentRowIndex];
this.CurrentRow = currentRow;
查看.xaml
<DataGrid ItemsSource="{Binding DataSource}"
CurrentItem="{Binding CurrentRow}"
CurrentCellChanged="DataGrid_OnCurrentCellChanged" />
查看.xaml.cs
private void DataGrid_OnCurrentCellChanged(object sender, EventArgs eventArgs)
{
var dataGrid = sender as DataGrid;
dataGrid.ScrollIntoView(dataGrid.CurrentItem);
}
通过选择滚动到行
此解决方案仅适用于DataGrid.SelectionUnit
值DataGridSelectionUnit.FullRow
或DataGridSelectionUnit.CellOrRowHeader
(不是仅基于单元格的选择-仅单元格的解决方案必须完全处理视图中的选择和滚动(。
您可以从视图模型中的属性设置选定的行,该属性绑定到DataGrid.SelectedItem
。
滚动必须由DataGrid
通过处理DataGrid.SelectionChanged
事件来处理。
视图模型(必须实现INotifyPropertyChanged
(
object selectedRow = this.DataSource[currentRowIndex];
this.SelectedRow = selectedRow;
查看.xaml
<DataGrid ItemsSource="{Binding DataSource}"
SelecetedItem="{Binding SelectedRow}"
SelectionChanged="DataGrid_OnCurrentCellChanged" />
查看.xaml.cs
private void DataGrid_OnSelectionChanged(object sender, SelectionChangedEventArgs eventArgs)
{
var dataGrid = sender as DataGrid;
dataGrid.ScrollIntoView(dataGrid.SelectedItem);
}