Я уже два дня бьюсь головой о том, чтобы заставить работать вложенный список, где у меня есть категории по вертикали, а затем по горизонтали. Количество изображений может быть легко 1000-2000. Вот мой код XAML для этого:
<ListBox x:Name="CategoryList" VirtualizingStackPanel.VirtualizationMode="Recycling">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<Grid Height="100" Width="480">
<Image HorizontalAlignment="Left" Width="80" Height="80" Margin="0,20,0,0" Source="/Images/listicons14.png"/>
<Rectangle HorizontalAlignment="Right" Width="390" Height="80" VerticalAlignment="Bottom" Fill="#FF7BB800"/>
<TextBlock Text="{Binding Category}" Margin="121,45,0,25" HorizontalAlignment="Left" Width="100"/>
</Grid>
<ListBox VirtualizingStackPanel.VirtualizationMode="Recycling" ItemsSource="{Binding Advertisements}" x:Name="Advertisement" ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Disabled">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Height="220" Width="300">
<Border BorderBrush="#FF7BB800" BorderThickness="3" HorizontalAlignment="Center" Width="275" Height="190" VerticalAlignment="Center">
<Image Source="{Binding AdvertisementImage}" Width="275" Height="190"/>
</Border>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
и вот как я сейчас его заполняю (для отладки я использую только три разных изображения, чтобы заполнить его. Размер картинок около 70 КБ, но я также тестировал очень маленький JPEG (по 10 КБ каждый). из них) и это не имело никакого влияния.
for (int i = 0; i < 20; i++)
{
ProductCategory productcategory = new ProductCategory { Category = "Book" + i.ToString() };
productcategory.Advertisements = new List<Advertisement>();
for (int j = 0; j < 10; j++)
{
productcategory.Advertisements.Add(new Advertisement { AdvertisementImage = new Uri("/Images/advGalaxyS2reduced.jpg", UriKind.Relative) });
productcategory.Advertisements.Add(new Advertisement { AdvertisementImage = new Uri("/Images/adviphone4sreduced.jpg", UriKind.Relative) });
productcategory.Advertisements.Add(new Advertisement { AdvertisementImage = new Uri("/Images/advLumia800reduced.jpg", UriKind.Relative) });
}
productcategories.Add(productcategory);
}
this.CategoryList.ItemsSource = productcategories;
Я также проверил это со списком Telerik's Listbox, и он определенно лучше, но не "продаваемый", так что я все еще задаюсь вопросом, не упустил ли я еще кое-что здесь. На мой взгляд, виртуализация данных включена, если я смотрю объем оперативной памяти, которую она потребляет. Пожалуйста, помогите мне здесь:)