DataGrid.ItemsSource更改后,将焦点放在一行上

时间:2015-02-06 15:11:06

标签: c# wpf datagrid wpfdatagrid

我希望在ItemsSource更改后将焦点放在所选行上。我想我差不多完成了,但是没有一个接受的答案对我有用:(

这是我的代码:

public void UpdateItemsSource()
{
    IdentifySelectedError(); //get "selectedRowIndex"
    DataGridRow dgr = (DataGridRow)DataGrid.ItemContainerGenerator.ContainerFromIndex(selectedRowIndex);
    using (var context = new Context())
    {
        DataGrid.ItemsSource = context.Error.Take(100).ToList();
    }
    //Everything does not work:
    //DataGrid.SelectedIndex = selectedRowIndex;
    //dgr.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
    //dgr.Focus();
    //DataGrid.Rows(dgr).Selected = true;
    //DataGrid.ScrollIntoView(dgr);
    //FocusManager.SetIsFocusScope(dgr, true);

}

我做错了什么?

编辑:

我注意到当我更改ItemsSource时,selectedRowInde的值为0.这就是为什么它无法将焦点设置在先前选择的Row上。任何想法如何抓住它?

1 个答案:

答案 0 :(得分:1)

将行索引保存到另一个int并将所选项目设置为它(或类似的东西):

public void UpdateItemsSource()
{
    IdentifySelectedError(); //get "selectedRowIndex"
    using (var context = new Context())
    {
        DataGrid.ItemsSource = context.Error.Take(100).ToList();
    }
    MainDataGrid.SelectedItem = MainDataGrid.Items[indexOfRow];
    MainDataGrid.ScrollIntoView(MainDataGrid.Items[indexOfRow]);
}