Подсчет исходных коллекций равен 0.
После удаления всех элементов в связанной коллекции значение datagrid.items.count равно 1, и единственным элементом в коллекции элементов является newitemplaceholder, но в сетке данных не отображается newitemplaceholder. Это может произойти только в том случае, если последний элемент является новым держателем элементов, и вы пытаетесь изменить его, но вместо нажатия клавиши ввода нажимаете кнопку, которая запускает событие удаления.
Так как выбранный элемент больше не является новым держателем элемента из-за события редактирования, элемент считается новым элементом в исходной коллекции.
Перед вызовом удаления в таблице данных есть item.count со значением 2.
Любая помощь о том, как получить новый держатель вместо показа в этой странной ситуации?
1 ответ
Я столкнулся с той же проблемой, более того, она произошла не только тогда, когда счетчик исходной коллекции равен 0, но и для любой последней строки в состоянии редактирования - после удаления из состояния редактирования новая строка записи в нижней части сетки исчезает. Я не нашел ничего лучше, чем это - довольно грубое и не очень быстрое решение, но, по крайней мере, оно работает для меня, и в настоящее время это лучше, чем ничего.
Учитывая DataGrid с именем grItems, ссылка на модель частного представления _vm, имеющая свойство Items, используемое для привязки сетки данных, пример кода может выглядеть следующим образом:
<DataGrid Name="grItems"
ItemsSource="{Binding Path=Items}"
UnloadingRow="DataGridUnloadingRow">
и код позади:
private void DataGridUnloadingRow(object sender, DataGridRowEventArgs e)
{
grItems.UnloadingRow -= DataGridUnloadingRow;
grItems.ItemsSource = null;
grItems.ItemsSource = _vm.Items;
grItems.UnloadingRow += DataGridUnloadingRow;
}
ОБНОВИТЬ
Позже я заметил, что это не работает, когда нам нужно прокрутить сетку - я получил некоторую внутреннюю ошибку WPF "Смещение и длина вышли за пределы...". Ранее у меня была кнопка удаления для каждой строки, которая была связана с командой, определенной на том же уровне, что и список элементов. Поэтому мне пришлось избавиться от команд и использовать код в представлении с небольшим подвохом - перед удалением элемента из коллекции моделей представления я перемещаю фокус куда-то за пределы сетки и после удаления возвращаю фокус обратно. Насколько я понимаю, этот трюк выполняет своего рода "фиксацию" вновь добавленной строки, а действие удаления выполняется для строки, которая не находится в состоянии редактирования.