In my WPF project I have build the following datagrid
with checkbox column:
XAML
<DataGrid AutoGenerateColumns="False"
TargetUpdated="IsIntermediatePointFixedByBracketDataGrid_TargetUpdated">
<DataGrid.Columns>
<DataGridCheckBoxColumn Binding=
"{Binding isFixedByBracket, NotifyOnTargetUpdated=True }" />
</DataGrid.Columns>
</DataGrid>
C#
private void IsIntermediatePointFixedByBracketDataGrid_TargetUpdated(object sender,
DataTransferEventArgs e)
{
DataGrid dg = (DataGrid)sender;
if (dg.SelectedIndex != -1
&& ((IsFixedByBracketElement)dg.SelectedItem).isFixedByBracket
!= this.currentIntermediatePosition.isFixedByBracket[dg.SelectedIndex])
{
this.currentIntermediatePosition.isFixedByBracket[dg.SelectedIndex] =
((IsFixedByBracketElement)dg.SelectedItem).isFixedByBracket;
}
}
When I check/uncheck a checkbox, the TargetUpdated
event is thrown, but the value changes only if I select and deselect the cell that contains the checkbox.
Why does this happen? How can I change this behavior?
The Reason for this is because the default behavior of binding inside CellTemplates
are UpdateSourceTrigger=LostFocus
.
Change to :
<DataGridCheckBoxColumn Binding="{Binding isFixedByBracket, NotifyOnTargetUpdated=True ,
UpdateSourceTrigger=PropertyChanged }" />