HTML
<DataGrid Name="grid" ItemsSource="{Binding UserSource}" Margin="10">
<!--
<inter:Interaction.Triggers>
<inter:EventTrigger EventName="SelectionChanged">
<inter:InvokeCommandAction Command="{Binding selectionCanged}" CommandParameter="{Binding ElementName=grid}"></inter:InvokeCommandAction>
</inter:EventTrigger>
</inter:Interaction.Triggers>
-->
<DataGrid.Columns>
<DataGridTemplateColumn Width="*">
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate x:Name="dtAllChkBx">
<!--在绑定数据源可能没有明确的Name时,我们就需要利用Binding的RelativeSource进行绑定,这种办法的意思是指当前元素和绑定源的位置关系。-->
<CheckBox Name="cbxAll" Content="全选" IsChecked="{Binding Path=DataContext.IsAllSelected,RelativeSource={RelativeSource AncestorType=DataGrid}}" />
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding Selected,UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn IsReadOnly="True" Width="*" Header="序号" Binding="{Binding id}" />
<DataGridTextColumn IsReadOnly="True" Width="*" Header="用户名称" Binding="{Binding name}" />
<DataGridTextColumn IsReadOnly="True" Width="*" Header="用户密码" Binding="{Binding pwd}" />
</DataGrid.Columns>
</DataGrid>
ViewModel
//绑定数据
public ObservableCollection<UserInfoModel> UserSource
{
get { return model.UserSource; }
set { model.UserSource = value; RaisePropertyChanged("UserSource"); }
}
//(表头)复选框 全选/反选
public bool IsAllSelected
{
get
{
return model.IsAllSelected;
}
set
{
model.IsAllSelected = value;
List<UserInfoModel> listmodel = new List<UserInfoModel>();
listmodel = UserSource.Select(s =>
{
if (s.Selected != IsAllSelected)
s.Selected = IsAllSelected;
return s;
}).ToList();
UserSource = new ObservableCollection<UserInfoModel>(listmodel);
RaisePropertyChanged("IsAllSelected");
}
}