有這樣的一個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