我在数据模板中有这个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.EditCellPropertyChanged绑定(bind)到的 View 模型的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)...

...这很奇怪。有什么想法可以解决这个问题吗?

最佳答案

直接从我的代码中调用myDataGrid.ScrollIntoView(object item)时,我遇到了类似的问题。我刚刚通过调用myDataGrid.UpdateLayout()修复了它。
如果适用,您可能想尝试一下。

关于c# - 在WPF Datagrid上按Enter时,DataGridCellsPanel.BringIndexIntoView中的ArgumentOutOfRangeException?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5237185/

10-09 19:28