在WPF中单击按钮时选择Datagrid行

在WPF中单击按钮时选择Datagrid行,wpf,datagrid,row,Wpf,Datagrid,Row,我有一个Datagrid,它使用DataTable中的值填充。在我的程序中,我有四个按钮:Goto First、Last、Next和Previous,因为名称表明我必须根据使用这些按钮所做的选择来选择行。如果我使用下面的代码获取行(例如第一行),一切看起来都很好 但当行数超过数据网格的高度时(当滚动条进入图片时),代码抛出空值 请帮我解决这个问题。我认为这是因为视图问题。由于虚拟化,容器仅在对象处于视图中时创建,因此您可以首先使用滚动将项目滚动到视图中,等待容器的创建,然后选择它 由于这相当混乱

我有一个Datagrid,它使用DataTable中的值填充。在我的程序中,我有四个按钮:Goto First、Last、Next和Previous,因为名称表明我必须根据使用这些按钮所做的选择来选择行。如果我使用下面的代码获取行(例如第一行),一切看起来都很好

但当行数超过数据网格的高度时(当滚动条进入图片时),代码抛出空值


请帮我解决这个问题。我认为这是因为视图问题。

由于虚拟化,容器仅在对象处于视图中时创建,因此您可以首先使用滚动将项目滚动到视图中,等待容器的创建,然后选择它

由于这相当混乱,我建议使用
DataGridRow
的样式将
IsSelected
绑定到项目上的属性(将其设置为)。然后,您可以将属性设置为true,并根据需要将项目滚动到视图中。

我尝试了第一种方法(ScrollIntoView),因此我可以移动到第一个和最后一个位置,但仍然无法选择该行,因为它提供了空值。只有在第一排,它表现得很好。CustomerGrid.ScrollIntoView(CustomerGrid.Items[0]);DataGridRow行=(DataGridRow)CustomerGrid.ItemContainerGenerator.ContainerFromIndex(0);row.IsSelected=true;row.Focus()@克里斯:我说你需要等待容器被创建,你不能用同样的方法,网格甚至不会在那个时候滚动,因为这是由UI线程在空闲时完成的。我不会这么做的,这是一种极大的痛苦。
DataGridRow row =(DataGridRow)userControl.m_DataGrid.ItemContainerGenerator.ContainerFromIndex(0);
row.IsSelected = true;