2015-02-06 19 views
3

我想在ItemsSource發生變化後將注意力集中在選定的行上。我想我差不多了,但沒有一些公認的答案確實爲我工作:(DataGrid.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.這就是爲什麼它不能將焦點設置在先前選擇的行上的任何想法如何捕捉它?

+0

有你踩到週四代碼'DataGrid.ItemsSource'在這條線上,當你移動過去吧..什麼當你將鼠標懸停在上下文上時,它是「context」的值。 – MethodMan 2015-02-06 15:16:08

+0

「context'的價值」是什麼意思? – 2015-02-06 15:23:15

+0

明白了,有'base','Error'和'ErrorScreenshot'(這是否回答你的問題?) – 2015-02-06 15:30:16

回答

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]); 
} 
相關問題