Подсчет исходных коллекций равен 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 "Смещение и длина вышли за пределы...". Ранее у меня была кнопка удаления для каждой строки, которая была связана с командой, определенной на том же уровне, что и список элементов. Поэтому мне пришлось избавиться от команд и использовать код в представлении с небольшим подвохом - перед удалением элемента из коллекции моделей представления я перемещаю фокус куда-то за пределы сетки и после удаления возвращаю фокус обратно. Насколько я понимаю, этот трюк выполняет своего рода "фиксацию" вновь добавленной строки, а действие удаления выполняется для строки, которая не находится в состоянии редактирования.

Другие вопросы по тегам