バインドされたコレクションのデータが更新された後、DataGrid のセルにフォーカスを当てると問題が発生します。たとえば、そのコレクションにフィルターを設定してから、保存された列の保存されたセルに再び焦点を合わせたいとします。
ScrollIntoView への呼び出しが同期されていると考えるのは本当ですか?それは、それを呼び出した後、目的の行とセルが作成され、フォーカスを設定できることを意味しますか? (繰り返しになりますが、 ScrollIntoView を呼び出した後、 Itemsgenerator が作業を終了し、目的のセルを確実に見つけることができると考えているのは本当ですか)
$
//set filter of DataGrid Collection
DataGrid_Standard.ScrollIntoView(rowNumber,cellNumber);
//we sure our desired cell are created now
DataGridRow row = (DataGridRow)DataGrid_Standard.ItemContainerGenerator.ContainerFromIndex(index);
if (row == null)
{
// may be virtualized, bring into view and try again
DataGrid_Standard.ScrollIntoView(DataGrid_Standard.Items[index]);
row = (DataGridRow)DataGrid_Standard.ItemContainerGenerator.ContainerFromIndex(index);
}
DataGridCellsPresenter presenter = GetVisualChild<DataGridCellsPresenter>(rowContainer);
// try to get the cell but it may possibly be virtualized
DataGridCell cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(column);
// now try to bring into view and retreive the cell
DataGrid_Standard.ScrollIntoView(rowContainer, DataGrid_Standard.Columns[column]);
cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(column); cell.focus();