Я использую элемент управления WPFToolkit Accordion с элементами в аккордеоне, определенными как TreeView.
Для контекста, вот соответствующая часть XAML:
<ScrollViewer VerticalScrollBarVisibility="Auto" CanContentScroll="True">
<layoutToolkit:Accordion DockPanel.Dock="Bottom"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
ItemsSource="{Binding FoodTypes}"
SelectionMode="ZeroOrOne"
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Recycling">
<layoutToolkit:Accordion.ContentTemplate>
<DataTemplate>
<TreeView Margin="0 0 0 0" BorderThickness="0"
ItemsSource="{Binding ChildrenView}"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Recycling">
Первоначально я реализовал это только с помощью TreeView (без WPFToolkit Accordian) и 40000 элементов, загруженных менее чем за секунду.
Когда я реализовал структуру с гармошкой на корневом уровне, время загрузки при нажатии на расширитель возросло до более 7 секунд. Это слишком долго.
Я профилировал приложение и увидел, что 500 элементов на первом уровне измерялись рекурсивно, и это приводило к увеличению времени загрузки. Похоже, что элемент управления Accordion не использует виртуализацию пользовательского интерфейса. Есть ли способ заставить аккордеон использовать виртуализацию пользовательского интерфейса? Если нет, то есть ли способ улучшить производительность аккордеона, чтобы он быстрее загружал предметы первого уровня?