文章来源: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;
}
本文档介绍了如何在WPF的DataGrid中添加复选框列,包括表头的全选复选框和单元格中的复选框绑定。通过设置DataGridTemplateColumn和IsChecked属性实现数据双向绑定,并提供了检查表头复选框是否选中的代码示例。
3862

被折叠的 条评论
为什么被折叠?



