I have a WPF DataGrid with some rows, where some of them have an images column that displays a lot of images, which i suspect is what's causing my DataGrid to scroll slowly, but I'm not sure how to solve it.
Here's my code:
<UserControl x:Class="InventoryManager.ItemsTab"
xmlns=";
xmlns:x=";
xmlns:mc=";
xmlns:d=";
xmlns:local="clr-namespace:InventoryManager"
xmlns:converters="clr-namespace:InventoryManager.Converters"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<UserControl.Resources>
<converters:ByteArrayToImageConverter x:Key="ByteArrayToImageConverter"/>
</UserControl.Resources>
<Grid>
<DataGrid VirtualizingStackPanel.IsVirtualizing="True" VirtualizingStackPanel.VirtualizationMode="Recycling" ItemsSource="{Binding Items}" AutoGenerateColumns="False" IsReadOnly="True">
<DataGrid.Columns>
<DataGridTextColumn Width="Auto" Header="Item ID" Binding="{Binding ItemID}"/>
<DataGridTextColumn Header="Type" Binding="{Binding Type}" />
<DataGridTemplateColumn Header="Description">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<TextBlock Text="{Binding Description}" TextWrapping="Wrap" MaxWidth="300"/>
</ScrollViewer>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Purchase Price" Binding="{Binding PurchasePrice, StringFormat=C}"/>
<DataGridTextColumn Header="Sold Price" Binding="{Binding SalePrice, StringFormat=C}"/>
<DataGridTextColumn Header="M Price" Binding="{Binding MPrice, StringFormat=C}"/>
<DataGridTextColumn Header="N Price" Binding="{Binding NPrice, StringFormat=C}"/>
<DataGridTemplateColumn Header="Note">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<TextBlock Text="{Binding Note}" TextWrapping="Wrap" MaxWidth="300"/>
</ScrollViewer>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Supplier" Binding="{Binding Supplier.Name}"/>
<DataGridTextColumn Header="Customer" Binding="{Binding Customer.Name}"/>
<DataGridTemplateColumn Header="Images">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid>
<VirtualizingStackPanel IsVirtualizing="True" VirtualizationMode="Recycling" Width="1200" Height="400"/>
<ItemsControl ItemsSource="{Binding Images}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="6"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Image Width="200" Height="200"
Source="{Binding ImageData, Converter={StaticResource ByteArrayToImageConverter}}"
ToolTip="{Binding FileName}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</UserControl>
I tried using Virtualization as shown above but that doesn't seem to fix the problem.