取消勾选列表中的任何一个CellTemplate复选框,我想取消选中标题复选框

问题描述:

我已经创建了一个数据表,其中包含4列,3个是字符串,另一个是布尔类型。 我将数据表(xmldatadocument)映射到wpf中的datagridview。 所以得到的结果看起来像是数据网格中的文本列和复选框列。 我添加了一个复选框头模板到chekbox列标题。 我能够执行取消选中列中的所有复选框,当我\头选框未选中。 我也能够执行检查列中的所有复选框,当检查标题chekcbox。但我有点麻烦,如果该列中的复选框之一未选中,我需要取消选中标题复选框也.. 请帮助我解决这.. 我已经添加了截图,XAML和代码如下。取消勾选列表中的任何一个CellTemplate复选框,我想取消选中标题复选框

Datagridview

PS:使用WPF DataGrid中。

<dg:DataGrid.Columns> 
       <dg:DataGridCheckBoxColumn Binding="{Binding Check}" Width="50" > 
        <dg:DataGridCheckBoxColumn.HeaderTemplate> 
         <DataTemplate x:Name="dtAllChkBx"> 
          <CheckBox Name="cbxAll" Content="{x:Static properties:Resources.lblAll}" Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked"></CheckBox> 
         </DataTemplate> 
        </dg:DataGridCheckBoxColumn.HeaderTemplate> 


public static ObservableCollection<Lst> list = new ObservableCollection<Lst>(); 
private void CheckBox_Checked(object sender, RoutedEventArgs e) 
{ 
    for (int i = 0; i < list.Count; i++) 
    { 
     list[i].Check = true; 
    } 
} 

private void CheckBox_Unchecked(object sender, RoutedEventArgs e) 
{ 
    for (int i = 0; i < list.Count; i++) 
    { 
     list[i].Check = false; 
    } 
} 

public class Lst : ObservableCollection<Lst> 
{ 
    public bool Check { get; set; } 
} 
+0

不应该设置支票上经过事件真假不检查的事件?你似乎做了相反的事情。另外,是否绑定到网格中的复选框列? – Akanksha 2012-04-19 11:35:43

+0

@Dzire我纠正了它。是lst绑定到网格中的复选框列。 – iYadav 2012-04-19 11:59:46

+0

您是否在绑定到复选框列的属性上调用属性更改?我试图结束。我也绑定了标题复选框,并将绑定到该列的属性更改。它的工作 – Akanksha 2012-04-19 12:05:30

这里是用于报头

<Style x:Key="checkBoxHeaderStyle" 
          TargetType="{x:Type w:DataGridColumnHeader}"> 
                <Setter Property="Template"> 
          <Setter.Value> 
           <ControlTemplate TargetType="{x:Type w:DataGridColumnHeader}"> 
            <CheckBox 
               IsChecked="{Binding Path = IsSelectAllChecked , Mode = TwoWay}"/> 
           </ControlTemplate> 
          </Setter.Value> 
         </Setter> 
        </Style> 

这里控制模板应用样式

<w:DataGridTemplateColumn MinWidth="50" 
               HeaderStyle="{DynamicResource checkBoxHeaderStyle}" 
               CanUserResize="False"> 
         <w:DataGridTemplateColumn.CellTemplate> 
          <DataTemplate> 
           <CheckBox Name="selectAllCheckBox" 
                    HorizontalAlignment="Center"            Margin="1,0,0,0"                       VerticalAlignment="Center" 
              IsChecked="{Binding Path = IsSelected, Mode=TwoWay}" /> 
          </DataTemplate> 
         </w:DataGridTemplateColumn.CellTemplate> 
        </w:DataGridTemplateColumn> 
模板柱

该被选定的属性是

public bool IsSelected 
{ 
    get { return selected; } 
    set { selected = value; 
    OnPropertyChanged("IsSelected"); 
    } 
} 

对于标题检查bo X

public bool IsSelectAllChecked 
     { 
      get { return isSelectAllChecked; } 
      set 
      { 
       isSelectAllChecked = value; 
       base.OnPropertyChanged("IsSelectAllChecked"); 
//Call the method which sets the IsSelected property to true of false, based on value 
       SetAllCheckBoxesState(value); 
      } 

    } 

我希望它能帮助:)

+0

如果lst未绑定到网格中的复选框列,该怎么办?我应该做什么改变?我编辑了我的XAML代码... plz检查。 – iYadav 2012-04-19 13:36:39

+0

你是怎么添加SetAllCheckBoxesState(value)?它没有定义礼仪? – iYadav 2012-04-19 13:55:44

+0

检查我的XAML和xaml.cs代码,然后让我知道我应该做些什么改变。 – iYadav 2012-04-19 13:58:56