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

有这样的一个DataGrid:spa

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

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

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

<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的名字空间为:xml

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

这回果真正常运行,最终的代码:事件

<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>

效果图:get

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

相关文章
相关标签/搜索