Search code examples
c#wpfwpfdatagrid

Get a select all button for a column in WPF Datagrid


I have created a WPF Datagrid and column definition is as follows:

<DataGrid.Columns>
<DataGridTemplateColumn Header="" MinWidth="32" Width="Auto" IsReadOnly="True">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                    <CheckBox IsChecked="{Binding Select, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Center" HorizontalContentAlignment="Stretch" ClickMode="Press"/>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                    <DataGridTextColumn Header="Package Name" Binding="{Binding PackageName}"  MinWidth="180" IsReadOnly="True" ElementStyle="{StaticResource ResourceKey=StyleDataGridText}"/>
                    <DataGridTextColumn Header="Version" Binding="{Binding Version}" Width="Auto" MinWidth="120" IsReadOnly="True" ElementStyle="{StaticResource ResourceKey=StyleDataGridText}"/>
                    <DataGridTextColumn Header="Release Date" Binding="{Binding ReleaseDate}" Width="Auto" MinWidth="120" IsReadOnly="True" ElementStyle="{StaticResource ResourceKey=StyleDataGridText}"/>
                    <DataGridTextColumn Header="Size" Binding="{Binding Size}" Width="Auto" MinWidth="10" IsReadOnly="True" ElementStyle="{StaticResource ResourceKey=StyleDataGridText}"/>
                    <DataGridTextColumn Header="Status" Binding="{Binding Status}" Width="Auto" MinWidth="80" IsReadOnly="True" ElementStyle="{StaticResource ResourceKey=StyleDataGridText}"/>
                    <DataGridHyperlinkColumn Header="Details" Binding="{Binding Details}" ContentBinding="{Binding Source={StaticResource ViewDetails}}" Width="Auto" MinWidth="80" IsReadOnly="True">
                        <DataGridHyperlinkColumn.ElementStyle>
                            <Style TargetType="TextBlock">
                                <EventSetter Event="Hyperlink.Click" Handler="OnBaseHyperlinkClick"/>
                                    <Setter Property="HorizontalAlignment" Value="Left"/>
                                    <Setter Property="Margin" Value="5,2,0,0"/>
                            </Style>
                        </DataGridHyperlinkColumn.ElementStyle>
                    </DataGridHyperlinkColumn>
                    <DataGridTextColumn Header="Updates" Binding="{Binding UpdateStatus}" Width="Auto" MinWidth="80" IsReadOnly="True" ElementStyle="{StaticResource ResourceKey=StyleDataGridText}"/>
                </DataGrid.Columns>

For the first column, i.e. check box. I want to have a column header as a checkbox for select all. How can i get a checkbox in the column header.


Solution

  • You can set HeaderTemplate to have anything you want in it:

           <DataGrid.Columns>
                <DataGridTemplateColumn>
                    <DataGridTemplateColumn.HeaderTemplate>
                        <DataTemplate>
                            <CheckBox/>
                        </DataTemplate>
                    </DataGridTemplateColumn.HeaderTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>