我在数据模板中有这个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
绑定(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/