文章来源:https://social.msdn.microsoft.com/Forums/zh-CN/beb11383-654e-44d8-8240-2dd0ac2454bd/wpf-datagrid-datagridtemplatecolumn-checkbox?forum=wpfzhchs
<DataGrid x:Name="dataGrid1" Height="auto" AutoGenerateColumns="False" CanUserAddRows="False"
IsReadOnly="True" Grid.Row="5" ItemsSource="{Binding Path=CCTCountTaskList
,IsAsync=True,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
SelectedItem="{Binding CCTCountTaskSelectItem}">
<DataGrid.Columns>
<DataGridTemplateColumn ClipboardContentBinding="{x:Null}" Header="{StaticResource Select}">
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<CheckBox x:Name="ckbSelectedAll" Content="{StaticResource All}" Checked="ckbSelectedAll_Checked" Unchecked="ckbSelectedAll_Unchecked" />
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding IsChecked,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
//设置表头的 Checked 的为未选中
CheckBox chb = GetVisualChild<CheckBox>(dataGrid1, v => v.Name == "ckbSelectedAll");
if (null != chb)
{
chb.IsChecked = false;
}
public T GetVisualChild<T>(DependencyObject parent, Func<T, bool> predicate) where T : Visual
{
int numVisuals = VisualTreeHelper.GetChildrenCount(parent);
for (int i = 0; i < numVisuals; i++)
{
DependencyObject v = (DependencyObject)VisualTreeHelper.GetChild(parent, i);
T child = v as T;
if (child == null)
{
child = GetVisualChild<T>(v, predicate);
if (child != null)
{
return child;
}
}
else
{
if (predicate(child))
{
return child;
}
}
}
return null;
}