取消勾选列表中的任何一个CellTemplate复选框,我想取消选中标题复选框
问题描述:
我已经创建了一个数据表,其中包含4列,3个是字符串,另一个是布尔类型。 我将数据表(xmldatadocument)映射到wpf中的datagridview。 所以得到的结果看起来像是数据网格中的文本列和复选框列。 我添加了一个复选框头模板到chekbox列标题。 我能够执行取消选中列中的所有复选框,当我\头选框未选中。 我也能够执行检查列中的所有复选框,当检查标题chekcbox。但我有点麻烦,如果该列中的复选框之一未选中,我需要取消选中标题复选框也.. 请帮助我解决这.. 我已经添加了截图,XAML和代码如下。取消勾选列表中的任何一个CellTemplate复选框,我想取消选中标题复选框
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; }
}
答
这里是用于报头
<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);
}
}
我希望它能帮助:)
不应该设置支票上经过事件真假不检查的事件?你似乎做了相反的事情。另外,是否绑定到网格中的复选框列? – Akanksha 2012-04-19 11:35:43
@Dzire我纠正了它。是lst绑定到网格中的复选框列。 – iYadav 2012-04-19 11:59:46
您是否在绑定到复选框列的属性上调用属性更改?我试图结束。我也绑定了标题复选框,并将绑定到该列的属性更改。它的工作 – Akanksha 2012-04-19 12:05:30