Что бы вызвать виртуализирующее ListView для некоторого времени генерировать все элементы?
-
14-11-2019 - |
Вопрос
отредактировано для ясности:
У меня есть 2 ListView I Мое приложение. Первый содержит список
Это помещено внутри сетки с шириной колонки авто.
<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...