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"); } }