ArgumentOutOfRangeException в DataGridCellsPanel.BringIndexIntoView при нажатии клавиши ВВОД в WPF Datagrid?

У меня есть этот WPF DataGrid в шаблоне данных:

<DataGrid
    CanUserAddRows="False" CanUserDeleteRows="False" CanUserReorderColumns="False"
    CanUserSortColumns="False"
    SelectionMode="Single" SelectionUnit="FullRow" GridLinesVisibility="Horizontal"
    IsEnabled="{Binding Enabled}"
    ItemsSource="{Binding ValuesDataTable}"
    CellEditEnding="DataGrid_CellEditEnding"/>

Вот обработчик событий:

private void DataGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
    if (e.EditAction == DataGridEditAction.Commit)
    {
        var textBox = e.EditingElement as TextBox;
        var dataGrid = (DataGrid)sender;
        var viewModel = dataGrid.DataContext as IHasEditableCell;
        viewModel.EditCell(e.Row.GetIndex(), e.Column.DisplayIndex, textBox.Text);
        dataGrid.CancelEdit();
    }
}

Ключ к этому - viewModel. EditCell вызывает событие PropertyChanged в свойстве ValuesDataTable модели представления, к которой привязана DataGrid .

Когда я редактирую ячейку и нажимаю на нее, все работает нормально. Однако, когда я редактирую ячейку и нажимаю Enter в конце редактирования, я получаю это исключение времени выполнения:

System.ArgumentOutOfRangeException was unhandled
  Message=Specified argument was out of the range of valid values.
Parameter name: index
  Source=PresentationFramework
  ParamName=index
  StackTrace:
       at System.Windows.Controls.DataGridCellsPanel.BringIndexIntoView(Int32 index)
       at System.Windows.Controls.Primitives.DataGridCellsPresenter.ScrollCellIntoView(Int32 index)
       at System.Windows.Controls.DataGrid.ScrollCellIntoView(Object item, DataGridColumn column)...

... что странно. Есть идеи, как я могу это обойти?

6
задан Scott Whitlock 8 March 2011 в 19:34
поделиться