Оказалось, что вам следует дополнительно прослушать отдельное событие ContainerContentChanging
, которое не только управляет фазами презентации, но и уведомляет об утилизации предметов. Теперь все работает, как и ожидалось (ну, почти как ожидалось: вместо немедленного повторного использования исчезающих элементов списка, ListView сохраняет огромное количество ~ 100 элементов на экране - и иногда очередь очистки пуста несмотря на это; иногда он запрашивает несколько элементов с начала список при просмотре списка прокручивается до конца и т. д., но, как правило, работает хорошо). Вот пример использования:
private void HandleContainerContentChanging(ListViewBase sender, ContainerContentChangingEventArgs args) {
if (args.InRecycleQueue) {
if (item.Tag is string itemType) {
_recycleBin.EnqueueItemWithType(itemType, item); // NOTE Do your own book-keeping here
args.Handled = true; // NOTE Handle event only in case of recycle to prevent breaking x:Phase bindings
}
}
}