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?

Foi útil?

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...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top