O que poderia causar um Virtualizar ListView que em algum momento de gerar todos os itens?
-
14-11-2019 - |
Pergunta
EDITADAS para maior clareza:
Eu tenho 2 ListView eu a minha candidatura.O primeiro contém uma Lista < Par de chaves< String, Lista De< Elementos > >.A exibição dos itens da lista é modelo para mostrar apenas a Chave (String).Quando o usuário seleciona um item nesta lista (SelectionChanged), ele altera a ItemSource da minha segunda ListView para o Valor do par de Chaves.
Este é colocado dentro de uma Grade com uma largura de Coluna de Auto.
<ListView ItemsSource="{Binding Path=FunctionIndex.Index}"
Name="completeFunctionIndexView"
Style="{StaticResource SearchListStyle}"
SelectionChanged="functionIndexView_SelectionChanged" />
<ListView Name="SearchResults"
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Recycling">
<ListView.View>
<GridView >
<GridViewColumn
CellTemplate="{StaticResource ElementLV}"
Width="Auto"/>
</GridView>
</ListView.View>
</ListView>
O Estilo SearchListStyle apenas constains um TextBlock mostrando a Chave (pois contém KeyPairs).ElementLV é um pequeno bloco de Texto é Executado com vinculado a diversas propriedades e ToString valores de minha elementos.
private void functionIndexView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
//This supposes we want to support a "multiple selection search"
//for now this isn't implemented
List<Element> Results = new List<Element>();
foreach (KeyValuePair<String, List<Element>> item in e.AddedItems)
{
Results = item.Value;
break;
}
SearchResults.ItemsSource = Results;
}
Estes lista, que pode ser apresentado no SearchResults listview pode ter grande número de elementos (100k+).Eu coloquei a IsVirtualizing no segundo listview, e na maioria das vezes ele funciona como charme.
Mas, às vezes, eu não consigo colocar o meu dedo sobre o que faz com que ele (muito rápida e clique para selecionar um item, talvez?) a aplicação decide que devem gera todos os itens da lista (que não queria, obviamente)...
Alguém pode me apontar na direção certa?Há uma razão pela qual o SearchResults decide pedir para gerar todos os itens?
Poderia ser vinculado à Largura dos itens e o SearchResults ListView, quando de Medição, tentando medir TODOS os seus itens?
Solução
Achei a situação que causou a minha Lista para gerar todos os elementos.Tem a ver com o ListView não ter especificado Largura, e estando em um Recipiente com Auto (uma coluna de grade com Auto ) como Largura.Parece que em determinados condição de que eu não tenho certeza ainda, o ListView tenta gerar todos os elementos para medir a sua Largura, em vez de utilizar apenas os visível no momento.
Eu sou acho que nem sempre fazem isso, mas nessa situação específica em meu aplicativo, agora ele faz...