Search code examples
c#wpfdatatablebindingdatagrid

How to add a CheckBoxColumn into a DataGrid which is Auto created


I have a DataGrid in my Wpf application. This DataDrid: ItemSource="{Bindind SomeDataTable}" & AutoGenerateColumns="True" Now I want to Add a Column with CheckBox, and Binding each CheckBox's state with each Row's IsSelected property in the DataGird.

I have tried to add a CheckBox cloumn with DataGridTemplateColumn,but I can't Bind the checkBox to the Rows' state.

<DataGrid x:Name="TableDataGrid" 
          Margin="0,0,0,0" 
          CanUserAddRows="True"
          CanUserDeleteRows="True" 
          CanUserSortColumns="False" 
          GridLinesVisibility="All"
          AutoGenerateColumns="True" 
          ItemsSource="{Binding TableData.DataInTable, Mode=TwoWay}">
    <DataGrid.ColumnHeaderStyle>
        <Style TargetType="{x:Type DataGridColumnHeader}">
            <Setter Property="Background"Value="#e8e8ec"/>
            <Setter Property="FontWeight"Value="Bold"/>
            <Setter Property="HorizontalContentAlignment"Value="Center"/>
            <Setter Property="BorderBrush"Value="Black"/>
            <Setter Property="BorderThickness"Value="0.5"/>
        </Style>
    </DataGrid.ColumnHeaderStyle>
    <DataGrid.Columns>
        <DataGridTemplateColumn>
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <CheckBox x:Name="DataCheckBox"></CheckBox>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

Solution

  • You can use AncestorType:

    <DataGrid x:Name="TableDataGrid" 
          Margin="0,0,0,0" 
          CanUserAddRows="True"
          CanUserDeleteRows="True" 
          CanUserSortColumns="False" 
          GridLinesVisibility="All"
          AutoGenerateColumns="True" 
          ItemsSource="{Binding MyList, Mode=TwoWay}">
            <DataGrid.ColumnHeaderStyle>
                <Style TargetType="{x:Type DataGridColumnHeader}">
                    <Setter Property="Background" Value="#e8e8ec"/>
                    <Setter Property="FontWeight" Value="Bold"/>
                    <Setter Property="HorizontalContentAlignment" Value="Center"/>
                    <Setter Property="BorderBrush" Value="Black"/>
                    <Setter Property="BorderThickness" Value="0.5"/>
                </Style>
            </DataGrid.ColumnHeaderStyle>
            <DataGrid.Columns>
                <DataGridTemplateColumn>
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <CheckBox  x:Name="DataCheckBox" IsChecked="{Binding Path=IsSelected, Mode=TwoWay,
                  RelativeSource={RelativeSource FindAncestor,
                  AncestorType={x:Type DataGridRow}}}"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>