Eu tive problema quando usei costume TreeView com costume TreeViewItem.
Quando o data binding executou, o Tree criou todos os itens no mesmo tempo – o que causou o CPU alto, muita memória , e a tela que teve o TreeView não estava respondendo por alguns segundos.
No fim da minha pesquisa eu achei que:
O VS 2010 profiler não ajudou e não achou a razão do problema, ele apontou para MeasureOverride método do que a razão verdadeira que foi que eu deletei um trigger no xaml style do custom TreeViewItem - e isso não deixou a virtualização do TreeView funcionar normal.
A falta de virtualização forçou o Tree criar todos os TreeViewItems quando o data binding para o ItemsSource mudou.
Reparação:
No xaml que contém a declaração do TreeViewItem (ou class que herdar ele):
Na linha que começa assim :
<Style TargetType="{x:Type TreeViewItem}">
dentro do triggers que começa assim:
<ControlTemplate.Triggers>
as seguintes linhas não podem remover, ou, podem usar outro multi trigger que causa o mesmo resultado:
<Trigger Property="IsExpanded" Value="false">
<Setter Property="Visibility" TargetName="ItemsHost" Value="Collapsed"/>
</Trigger>
Com essas linhas, o TreeView não vai criar todos filhos/netos até o usuário vai expandir os items "pais" primeiro.
Isso pode fazer os desempenhos muito mais rápido.
Hello, Viviane.
ReplyDeleteThe excellent and lovely work.
The autumn profound, painted space
The prayer for all peace.
from Japan, ruma ❋