wpf datagridcheckboxcolumn: how to enable/disable checkboxes wpf datagridcheckboxcolumn: how to enable/disable checkboxes wpf wpf

wpf datagridcheckboxcolumn: how to enable/disable checkboxes


Thanks to Magnus in MSDN Forum, here is the correct answer of the problem:

<DataGrid x:Name="grid" AutoGenerateColumns="False">        <DataGrid.Resources>            <Style TargetType="CheckBox" x:Key="style">                <Style.Triggers>                    <MultiDataTrigger>                        <MultiDataTrigger.Conditions>                            <Condition Binding="{Binding HasMaxNumberReached, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" Value="true"/>                            <Condition Binding="{Binding IsChecked, RelativeSource={RelativeSource Self}}" Value="false"/>                        </MultiDataTrigger.Conditions>                        <Setter Property="IsEnabled" Value="False"/>                    </MultiDataTrigger>                </Style.Triggers>                <EventSetter Event="CheckBox.Checked" Handler="DataGridCheckBoxColumn_Checked" />                <EventSetter Event="CheckBox.Unchecked" Handler="DataGridCheckBoxColumn_Checked" />            </Style>        </DataGrid.Resources>        <DataGrid.Columns>        <DataGridCheckBoxColumn x:Name="IsFixedByBracketColumn"  Header="Fissato con staffa"                                 Binding="{Binding isFixedByBracket, UpdateSourceTrigger=PropertyChanged}" IsReadOnly="False"                                ElementStyle="{StaticResource style}" EditingElementStyle="{StaticResource style}">        </DataGridCheckBoxColumn>        </DataGrid.Columns>    </DataGrid> 

Here the complete topic


Yes you can do it with the help of Triggers, like this

<Style x:Key="MyCheckBoxStyle" TargetType="{x:Type CheckBox}">   <Style.Triggers>  <Trigger Property="IsChecked" Value="False">   <Setter Property="IsEnabled" Value="False" /> </Trigger></Style.Triggers>

and you can apply this style to your checkbox


you can set DataGridCheckBoxColumn.ElementStyle to enable/disable cell as explained below. Here assuming HasMaxNumberReached is a property on your ViewModel which tell that the count of max checkbox checked has reached.

  <DataGrid>        <DataGrid.Columns>            <DataGridCheckBoxColumn>                <DataGridCheckBoxColumn.ElementStyle>                    <Style TargetType="Checkbox">                        <Style.Triggers>                            <MultiDataTrigger>                                <MultiDataTrigger.Conditions>                                    <Condition Binding="{Binding HasMaxNumberReached, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" Value="true"/>                                    <Condition Binding="{Binding IsChecked, RelativeSource={RelativeSource Self}}" Value="false"/>                                </MultiDataTrigger.Conditions>                                <Setter Property="IsEnabled" Value="False"/>                            </MultiDataTrigger>                                                       </Style.Triggers>                        <EventSetter                              Event="CheckBox.Checked"                               Handler="DataGridCheckBoxColumn_Checked" />                         <EventSetter                    </Style>                </DataGridCheckBoxColumn.ElementStyle>            </DataGridCheckBoxColumn>        </DataGrid.Columns>    </DataGrid> private bool hasMaxNumberReached; public bool HasMaxNumberReached {  get      {return hasMaxNumberReached;}  set      {      hasMaxNumberReached =value;        RaisePropertyChanged("HasMaxNumberReached");       }  }