UWP - Как правильно утилизировать элементы в ListView? - PullRequest
0 голосов
/ 19 мая 2019

Я представляю гетерогенный массив данных в ListView, прослушивая событие ChoosingItemContainer.Все работает отлично, за исключением повторного использования элемента: ListView продолжает предлагать неверный тип контейнера (это список с функцией «загрузить больше», поэтому элемент «загрузить больше» всегда находится в очереди на повторную обработку каждый раз, когда загрузка завершается).Есть ли способ извлечь другой контейнер из очереди ListViewBase или хотя бы удалить предлагаемый в настоящее время контейнер из очереди, чтобы я мог дополнительно управлять своей собственной корзиной на основе тегов, и в следующий раз появится другой контейнер?

ChoosingItemContainer пример на сайте Microsoft предлагает нечто вроде собственной корзины, но довольно загадочно, что такое «релевантное хранилище» и как удалять несоответствующие переработанные контейнеры из ListViewBase, чтобы они перестали появляться снова каждый раз.

Что мне здесь не хватает?

1 Ответ

0 голосов
/ 19 мая 2019

Оказалось, что вам следует дополнительно прослушать отдельное событие 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
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...