DataGrid 简单自定义表头插入CheckBox实现全选/全不选

有这样的一个DataGrid:

想要实现选择列全选/全不选功能,应该在表头也加个CheckBox最合适。问Google,写成了下面的样子:

<data:DataGridTemplateColumn.Header>
  <CheckBox x:Name="dgSelectAll" Content="全选"></CheckBox>
</data:DataGridTemplateColumn.Header>

运行起来直接抛异常,继续问Google,也有人提到同样的问题,给出的办法是改用:DataGridTemplateColumn.HeaderStyle,如法炮制:

<data:DataGridTemplateColumn.HeaderStyle>
  <Style TargetType="localprimitives:DataGridColumnHeader">
    <Setter Property="ContentTemplate">
      <Setter.Value>
        <DataTemplate>
          <CheckBox x:Name="dgSelectAll" Content="全选"/>
        </DataTemplate>
      </Setter.Value>
    </Setter>
  </Style>
</data:DataGridTemplateColumn.HeaderStyle>

localprimitives的名字空间为:

xmlns:localprimitives="clr-namespace:System.Windows.Controls.Primitives;assembly=System.Windows.Controls.Data"

这回果然正常运行,最终的代码:

<data:DataGrid.Columns>
    <data:DataGridTemplateColumn>
        <data:DataGridTemplateColumn.HeaderStyle>
            <Style TargetType="localprimitives:DataGridColumnHeader" BasedOn="{StaticResource DataGridColumnHeaderStyle}">
                <Setter Property="ContentTemplate">
                    <Setter.Value>
                        <DataTemplate>
                            <CheckBox x:Name="dgSelectAll" Content="全选" Checked="dgSelectAll_Checked" Unchecked="dgSelectAll_Unchecked" />
                        </DataTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </data:DataGridTemplateColumn.HeaderStyle>
        <data:DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <CheckBox x:Name="ckXQ" IsChecked="{Binding Select,Mode=TwoWay}" Click="ckXQ_Click"  VerticalAlignment="Center" HorizontalAlignment="Center"/>
            </DataTemplate>
        </data:DataGridTemplateColumn.CellTemplate>
    </data:DataGridTemplateColumn>
    <data:DataGridTextColumn Header="2G/TD" Binding="{Binding Beizhu}" />
    <data:DataGridTextColumn Header="小区名称" Binding="{Binding Zh_label}" />
    <data:DataGridTextColumn Header="CI" Binding="{Binding Cell_id}" />
    <data:DataGridTextColumn Header="微蜂窝宏蜂窝" Binding="{Binding Btslx}" />
</data:DataGrid.Columns>

效果图:

题外话,<CheckBox x:Name="ckXQ" IsChecked="{Binding Select,Mode=TwoWay}" Click="ckXQ_Click",这个Click事件,开始也是使用的Checked和Unchecked事件,奇怪的是后台List数据改变有差,我选择一个,在Checked事件中查找List数据变化,竟然无变化。我选择二个,第一次选中的List数据变了,绑定的Select变为1,第二次选中的依然无变。选择三个,第二次选中的变为1,第三次选中的无变,以此类推。改用Click事件才算正常,很奇怪呀。

 

 

 

转载于:https://www.cnblogs.com/tails/p/3292078.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值