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

相關文章
相關標籤/搜索