Просто чтобы добавить мое собственное наблюдение.У меня была сетка данных со специально определенными столбцами в Xaml, а его ItemsSource был установлен в простой словарь.Когда я попытался отредактировать второй столбец, я получил это исключение, ссылаясь на словарь.Затем я устанавливаю сетку данных ItemsSource в список ключей (dataGrid.Keys.ToList ()).Я мог тогда отредактировать второй столбец.Кажется, что представление списка позволяет 'EditItem'.
edit : сделал немного больше копаться в этом.Я установил обработчик BeginningEdit и начал ковыряться.Одна вещь, которую я заметил, состояла в том, что каждый раз, когда я получал эту ошибку, EditingEventArgs.Source был границей.Если я найду время, я могу взглянуть на это немного дальше.Кроме того, в одном случае мое преобразование ключей словаря в список не сработало.Мне пришлось преобразовать его в коллекцию Observable, несмотря на то, что List был пригоден для всех других мест в моем коде, где я делал по существу идентичный тип назначения.
править снова Хорошо, у меня есть другое исправление для тех, для которых использование типа IList не работает.Присоедините обработчик BeginningEdit к вашей DataGrid и укажите на этот код:
private void Grid_BeginningEdit(object sender, DataGridBeginningEditEventArgs e)
{
//// Have to do this in the unusual case where the border of the cell gets selected
//// and causes a crash 'EditItem is not allowed'
e.Cancel = true;
}
Это произойдет, только если вам каким-то образом удастся физически коснуться границы ячейки.OriginalSource события - это Border, и я думаю, что здесь происходит вместо TextBox или другого редактируемого элемента, являющегося источником, как и ожидалось, эта не редактируемая Border появляется для редактирования, что вызывает исключение, которое скрывается в 'EditItem не допускается, исключение.Отмена этого RoutedEvent до того, как он начнет пузыриться с его недопустимым исходным источником, прекратит возникновение ошибки в его дорожках.
Рад, что нашел это, так как в моем случае была DataGrid, на которой я не мог использовать тип IList.