I want to make a DataGrid similar to this
Now I made a DataGrid which looks like
Here is my code:
<DataGrid
ScrollViewer.IsDeferredScrollingEnabled="True"
Grid.Row="1"
AutoGenerateColumns="False"
CanUserAddRows="False"
CanUserDeleteRows="False"
CanUserSortColumns="True"
EnableColumnVirtualization="True"
EnableRowVirtualization="True"
ItemsSource="{Binding MusicManager.MusicDataManager.Albums.Albums}"
VirtualizingPanel.ScrollUnit="Pixel"
VirtualizingStackPanel.VirtualizationMode="Recycling">
<DataGrid.Columns>
<DataGridTemplateColumn
Width="auto"
MaxWidth="150"
Header="Duration">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
</Grid.RowDefinitions>
<myControls:ImageProviderViewer
Grid.Row="0"
Width="90"
Height="90"
Margin="0"
HidePlaceholderAtBeginning="True"
HighPriorityImage="True">
<myControls:ImageProviderViewer.ImageProvider>
<MultiBinding Converter="{StaticResource AlbumCoverConverter}">
<Binding Path="DataContext" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=UserControl}" />
<Binding Path="Guid" />
</MultiBinding>
</myControls:ImageProviderViewer.ImageProvider>
<myControls:ImageProviderViewer.Placeholder>
<Viewbox Width="85" Height="85">
<Path Fill="Gray" Data="{StaticResource VectorMicrophone}" />
</Viewbox>
</myControls:ImageProviderViewer.Placeholder>
</myControls:ImageProviderViewer>
<TextBlock
Grid.Row="1"
Grid.ColumnSpan="2"
Width="auto"
Margin="2"
FontSize="12"
Text="{Binding Name}"
TextWrapping="Wrap" />
<TextBlock
Grid.Row="2"
Grid.ColumnSpan="2"
Width="auto"
Margin="2"
FontSize="12"
Text="{Binding Artists, Converter={StaticResource AlbumArtistConverter}}"
TextWrapping="Wrap" />
<TextBlock
Grid.Row="3"
Grid.ColumnSpan="2"
Width="auto"
Margin="2"
FontSize="12"
TextWrapping="Wrap">
<TextBlock.Text>
<MultiBinding Converter="{StaticResource AlbumTracksConverter}" StringFormat="Tracks: {0:F2}">
<Binding Path="DataContext" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=UserControl}" />
<Binding Path="Guid" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<DataGrid
AutoGenerateColumns="False"
CanUserAddRows="False"
CanUserDeleteRows="False"
CanUserSortColumns="True"
EnableColumnVirtualization="True"
EnableRowVirtualization="True">
<i:Interaction.Behaviors>
<services:IgnoreMouseWheelBehavior />
</i:Interaction.Behaviors>
<DataGrid.ItemsSource>
<MultiBinding Converter="{StaticResource AlbumTracksCollectionConverter}">
<Binding Path="DataContext" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=UserControl}" />
<Binding Path="Guid" />
</MultiBinding>
</DataGrid.ItemsSource>
<DataGrid.Columns>
<DataGridTemplateColumn
Width="*"
MaxWidth="500"
Header="Title">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Title}" TextWrapping="Wrap" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn
Width="*"
MaxWidth="500"
Header="Album">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Album.Name}" TextWrapping="Wrap" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn
Width="auto"
MaxWidth="500"
Header="Duration">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Duration}" TextWrapping="Wrap" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn
Width="auto"
MaxWidth="500"
Header="Year">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Year}" TextWrapping="Wrap" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
But this is not what I need. DataGrid is very slow at scrolling. Also, I need to resize all columns at once.
Is there a solution to this problem?