Mam ItemsControl
listę zawierającą dane, które chciałbym zwirtualizować, ale VirtualizingStackPanel.IsVirtualizing="True"
nie wydaje się działać z ItemsControl
.
Czy tak jest naprawdę, czy jest inny sposób na zrobienie tego, którego nie jestem świadomy?
Aby przetestować, użyłem następującego bloku kodu:
<ItemsControl ItemsSource="{Binding Path=AccountViews.Tables[0]}"
VirtualizingStackPanel.IsVirtualizing="True">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Initialized="TextBlock_Initialized"
Margin="5,50,5,50" Text="{Binding Path=Name}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Jeśli zmienię na ItemsControl
a ListBox
, widzę, że Initialized
zdarzenie odbywa się tylko kilka razy (ogromne marginesy są po prostu tak, że muszę przejść tylko przez kilka rekordów), jednak w miarę ItemsControl
inicjalizacji każdej pozycji.
Próbowałem ustawić wartość ItemsControlPanelTemplate
a, VirtualizingStackPanel
ale to nie pomaga.
ItemsControl
naScrollViewer
instread dodającScroll
doControlTemplate
?Opierając się na odpowiedzi DavidaN, oto styl, którego możesz użyć w ItemsControl, aby go zwirtualizować:
Nie podoba mi się sugestia użycia ListBox, ponieważ pozwalają one na wybór wierszy, w których niekoniecznie chcesz.
źródło
Po prostu domyślnym
ItemsPanel
nie jest plikVirtualizingStackPanel
. Musisz to zmienić:źródło