如何在加载WPF数据网格时滚动到给定行



我在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.SelectionUnitDataGridSelectionUnit.FullRowDataGridSelectionUnit.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);
}

相关内容

  • 没有找到相关文章

最新更新