0

我已經創建了一個數據表,其中包含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

回答

0

這裏是用於報頭

<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