ListBox, VirtualizingStackPanel e rolagem suave no WPF
-
20-09-2019 - |
Pergunta
eu tenho um ListBox
isso pode ter muitas fileiras de registros de banco de dados modelos, incluindo um Image
, ligado a um ObservableCollection<MyItem>
. Às vezes, a coleção pode conter milhares de itens.
O desempenho é ótimo, mas a rolagem é o comportamento macio padrão. Eu gostaria que tivesse rolagem suave, então desmarquei ScrollViewer.CanContentScroll
.
Agora eu tenho rolagem suave, mas o desempenho é horrendo: os dados são recuperados em um fio separado e o thread termina rapidamente, mas leva de 10 a 20 segundos para que os resultados sejam exibidos no ListBox
. Presumo que isso ocorre porque desmarcha ScrollViewer.CanContentScroll
muda o subjacente VirtualizingStackPanel
para um regular StackPanel
E assim está carregando a coleção inteira antes de exibir os resultados.
Então, minha pergunta é a seguinte: como faço para manter o rolamento suave sem sacrificar o VirtualizingStackPanel
comportamento e desempenho?
Solução
Quando você desmarcam o cancOntentscroll, você perder a virtualização. E a resposta é realmente frustrante: por enquanto, não há solução pronta para uso :(.
PS: Este não é o primeiro post aqui, perguntando esta mesma pergunta.
Outras dicas
Se você usar .NET 4.5 (ou 4.0 se você estiver disposto a invadir um pouco), então há uma resposta por aqui.
Observe que o comentário de @Guilluame estava aqui muito antes dessa resposta, mas não foi particularmente visível ao desviar as respostas.