我在数据模板中有这个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)...
......这很奇怪。我有什么想法可以解决这个问题吗?
答案 0 :(得分:5)
直接从我的代码调用myDataGrid.ScrollIntoView(object item)
时遇到了类似的问题。我刚才通过调用myDataGrid.UpdateLayout()
修复了它。
如果适用,您可能想尝试一下。
答案 1 :(得分:1)
我确实存在这个问题,但仍然不知道为什么会这样。相当令人不满意的是,我最终通过捕获回车键并手动提交编辑来解决它。
private void MyDataGrid_OnPreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Return)
{
e.Handled = true;
MyDataGrid.CommitEdit();
}
}