Подсчет исходных коллекций равен 0. - PullRequest
3 голосов
/ 03 сентября 2010

После удаления всех элементов в связанной коллекции значение datagrid.items.count равно 1, и единственным элементом в коллекции элементов является newitemplaceholder, но в таблице данных не отображается newitemplaceholder. Это может происходить только в том случае, если последний элемент является новым держателем элементов, и вы пытаетесь изменить его, но вместо нажатия кнопки ввода нажмите кнопку, которая вызывает событие удаления.

Поскольку выбранный элемент больше не является новым держателем элемента из-за события редактирования, элемент считается новым элементом в исходной коллекции.

Перед вызовом удаления в таблице данных есть элемент item.count, равный 2.

Любая помощь в том, как заставить нового держателя отображаться в этой странной ситуации?

1 Ответ

0 голосов
/ 31 октября 2014

Я столкнулся с той же проблемой, более того, она произошла не только когда счетчик исходной коллекции равен 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;
    } 

UPDATE

Позже я заметил, что это не работает, когда нам нужно прокрутить сетку - я получил некоторую внутреннюю ошибку WPF «Смещение и длина вышли за пределы ...». Ранее у меня была кнопка удаления в строке, которая была связана с командой, определенной на том же уровне, что и список элементов. Поэтому мне пришлось избавиться от команд и использовать код в представлении с небольшим подвохом - перед удалением элемента из коллекции моделей представления я перемещаю фокус куда-то за пределы сетки и после удаления возвращаю фокус обратно. Насколько я понимаю, этот трюк выполняет своего рода «фиксацию» вновь добавленной строки, а действие удаления выполняется для строки, которая не находится в состоянии редактирования.

...