我是卡在DataGrid中(WPF)到复选框相关的问题。 我已经附上截图为更好地理解这一问题。
问题:当孩子之一是未选中的DataHeader列复选框,甚至检查。 我期望的解决方案来解决这个,这样,当孩子的一个没有被选中由用户明确,全(列标题)应选中含蓄。
请帮家伙...谢谢您PLZ检查链接。 我想解决这样的工作。 http://www.codeproject.com/Articles/42437/Toggling-the-States-of-all-CheckBoxes-Inside-a-Dat#
<dg:DataGrid.Columns>
<dg:DataGridCheckBoxColumn Binding="{Binding Check}" IsThreeState="True" Width="50">
<dg:DataGridCheckBoxColumn.HeaderTemplate>
<DataTemplate x:Name="dtAllChkBx">
<CheckBox Name="cbxAll" Content="{x:Static properties:Resources.lblAll}"
Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked" />
</DataTemplate>
</dg:DataGridCheckBoxColumn.HeaderTemplate>
</dg:DataGridCheckBoxColumn>
。
private void CheckBox_Unchecked(object sender, RoutedEventArgs e)
{
unchck_all_prd();
dgEnggAcc.Items.Refresh();
}
private void unchck_all_prd()
{
for (int i = 0; i < engg_list.Count; i++)
{
engg_list[i].Check = false;
}
}
private void chck_all_prd()
{
for (int i = 0; i < engg_list.Count; i++)
{
engg_list[i].Check = true;
}
}
public class EnggLst : ObservableCollection<EnggLst>
{
public bool Check { get; set; }
}
//this event is for **Checked and UnChecked** of up check box (cbxall)
private void UpCheckbox_Checked(object sender, RoutedEventArgs e)
{
//checkBox1 = cbxall (your up checkbox)
if (checkBox1.IsChecked == true)
{
dataGrid1.Items.OfType<YourClass>().ToList().ForEach(x => x.IsChecked = true);
}
else
{
dataGrid1.Items.OfType<YourClass>().ToList().ForEach(x => x.IsChecked = false);
}
}
//this event is for all other check box
//**Checked and UnChecked** of all other check box is this event
private void OtherCheckbox_Checked(object sender, RoutedEventArgs e)
{
//checkBox1 = cbxall (your up checkbox)
if (dataGrid1.Items.OfType<YourClass>().All(x => x.IsChecked == true))
{
checkBox1.IsChecked = true;
}
else if (dataGrid1.Items.OfType<YourClass>().All(x => x.IsChecked == false))
{
checkBox1.IsChecked = false;
}
else
{
checkBox1.IsChecked = null;
}
}
In your XAML Datagrid add:
<DataGridTemplateColumn.Header>
<CheckBox x:Name="ckbHeader" Click="ckbHeader_Click"></CheckBox>
</DataGridTemplateColumn.Header>
In your code add:
var ckbox = sender as CheckBox;
var All = Collection.View.SourceCollection as List<ObjectX>;
if (ckbox.IsChecked == true)
{
foreach (var item in All)
item.Marked = true;
}
else
{
foreach (var item in All)
item.Marked = false;
}
Collection.View.Refresh();
NOTE: The sender is CheckBox
文章来源: Datagrid Column header should check / uncheck CheckBox’s state depending upon whether all CheckBoxes of a DataGridView column are checked or unchecked