Rozszerzając powyższą koncepcję DataGridCell, właśnie ją wykorzystaliśmy.
... XAML ...
<DataGrid Grid.ColumnSpan="2" Name="dgMissingNames" ItemsSource="{Binding Path=TheMissingChildren}" Style="{StaticResource NameListGrid}" SelectionChanged="DataGrid_SelectionChanged">
<DataGrid.Columns>
<DataGridTemplateColumn CellStyle="{StaticResource NameListCol}">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding Path=Checked, UpdateSourceTrigger=PropertyChanged}" Name="theCheckbox" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Binding="{Binding Path=SKU}" Header="Album" />
<DataGridTextColumn Binding="{Binding Path=Name}" Header="Name" "/>
<DataGridTextColumn Binding="{Binding Path=Pronunciation}" Header="Pronunciation" />
</DataGrid.Columns>
</DataGrid>
TheMissingChildren jest obiektem ObservableCollection, które zawiera listę elementów danych w tym polu wartości logicznej „zaznaczone”, którego używamy do wypełnienia DataGrid.
Kod SelectionChanged tutaj ustawi sprawdzoną boolean w podstawowym obiekcie TheMissingChildren i odpali odświeżenie listy elementów. To gwarantuje, że pole zostanie odznaczone & wyświetlać nowy stan bez względu na to, gdzie klikniesz wiersz. Kliknięcie pola wyboru lub w dowolnym miejscu w rzędzie spowoduje przełączenie czeku.
private void DataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
DataGrid ThisGrid = (DataGrid)sender;
CheckedMusicFile ThisMusicfile = (CheckedMusicFile)ThisGrid.SelectedItem;
ThisMusicfile.Checked = !ThisMusicfile.Checked;
ThisGrid.Items.Refresh();
}