Что бы вызвать виртуализирующее ListView для некоторого времени генерировать все элементы?

StackOverflow https://stackoverflow.com/questions/9518201

Вопрос

отредактировано для ясности:

У меня есть 2 ListView I Мое приложение. Первый содержит список >. Дисплей элементов в списке шаблон, чтобы показать только ключ (строку). Когда пользователь выбирает элемент в этих списках (выбораChanged), он изменяет элементы мусора моего второго ListView для значения KeyPair.

Это помещено внутри сетки с шириной колонки авто.

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

Стиль SearchlistStyle только контуц TextBlock, показывающий ключ (поскольку оно содержит клавиатуры). ElementLV - это небольшой текстовый блок с прогонами, связанными с различными свойствами и значениями ToString моих элементов.

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

Этот список, который можно отобразить в ListView SearchResults, может иметь большое количество элементов (100k +). Я положил усугубирующуюся во втором ListView, и большую часть времени он работает как шарм.

Но иногда я не могу положить палец на то, что вызывает его (слишком быстро, щелкнуть, чтобы выбрать элемент, может быть, может быть?) Приложение решает, что он должен генерировать все элементы в списке (что не хочет очевидно). ..

Может кто-нибудь указать мне в правильном направлении? Есть ли причина, по которой поискРесультс решит попросить сгенерировать все предметы?

может быть связано с шириной элементов и ListView SearchResults, при измерении, пытаясь измерить все его элементы?

Это было полезно?

Решение

I have found the situation which caused my List to generate all elements. It has to do with the ListView to have no specified Width, and beeing in a Container with Auto (a grid column with Auto ) as Width. It seems in certain condition which I'm not sure yet, the ListView tries to generate all the elements to measure their Width instead of using only those currently visible.

I'm think it didn't always do that, but in this particular situation in my application, now it does...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top