У меня есть некоторые проблемы с ListView
, где ItemsSource
может быть очень важным (более 5 000 единиц).Windows Store App ListView мерцание/содержание dispappearing
Мое приложение - приложение чата, состоящее из двух списков ListView.
- Один на левой стороне, поток ListView показывает список активных потоков (разговора)
- Один справа, разговор ListView показывает все сообщения, которыми обмениваются.
Я использую DataTemplate
шаблон так, что каждый элемент моего разговора ListView настраивается следующим образом: чат Bubble используя Coding4Fun
пакет: http://www.geekchamp.com/articles/getting-started-with-the-coding4fun-toolkit-windows-phone-chatbubble-control
Каждый чат Bubble имеет два TextBlock
(один за содержание сообщений , другая для отметки времени).
Позже, я намерен добавить фотографии к этому сообщению.
Когда пользователь нажимает на беседу из списка ListView слева, основной диалог ListView загружается соответствующей коллекцией бесед (наблюдаемой). Если эта коллекция особенно большая (в одном случае у меня более 10 000 сообщений), то в списке ListView отображается содержимое, но как только переключается на другой поток и возвращается к предыдущему, контент не отображается больше, хотя он здесь, он загружен. Начиная прокручивание, делает мигание ListView, и содержимое, следовательно, видимо, но сильно мерцает. Если я остановлю прокрутку, контент не будет показан, показывая пустой список.
Дальнейшие испытания показали, что эта проблема возникает только с большой коллекцией в соответствии с использованием метода ScrollIntoView()
: действительно, я хочу показать нижнюю часть моего разговора ListView каждый раз, когда пользователь нажимает на поток, чтобы он мог прочитать последний вместо старых, поэтому он должен каждый раз прокручивать весь путь до дна.
Я подтвердил эту проблему, прокомментировав строку, в которой я делаю ListView для прокрутки вниз. Проблема мерцания исчезла.
Наконец, как я писал мой вопрос, я нашел StackOverflow вопрос, который, кажется, мой случай: Windows Store universal app - ListView oddity
К сожалению, решение не очень понятно. Как я могу решить свою проблему? Как использовать VirtualizingStackPanel/>
внутри ListView, который использует alread <ListView.ItemContainerStyle>
, ListView.ItemTemplate>
и <DataTemplate>
?
Я согласен с вашим подходом. Но приложение Windows Store показывает больше ограничений в отношении WPF, из-за виртуализации: https://www.microsoftpressstore.com/articles/article.aspx?p=2216995&seqNum=4. Я, наконец, сумел реализовать его, но анимация отвратительна: предыдущие чаты в чате остаются на несколько мгновений, появляется новый пузырь (из недавно выбранного потока), затем старый чат исчезает, как отставание ... Теперь я смотрю ScrollIntoView анимация ... и показывая небольшое количество пузырей на развод. Любая ссылка или руководство? – Mackovich
Я предполагаю, что ваши пузыри в каком-то списке или массиве. Вы можете использовать 'Linq', чтобы получить то, что вы хотите. Взгляните на это http://stackoverflow.com/questions/4872946/linq-query-to-select-top-5 – micbobo
Это позволяет вам в значительной степени просматривать список или массивы так же, как и в таблице SQL – micbobo