WPF Datagrid 表格单选、多选、全选、全不选
本文为MVVM模式下的
单选、全选:
<DataGrid Background="White" Grid.Column="1" Margin="8,0,16,0" Name="dgList" BorderBrush="#DDDDDD" BorderThickness="1" Style="{StaticResource DataGridStyle}" LoadingRow="dgList_LoadingRow"
ItemsSource="{Binding dgList, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
<DataGrid.Columns>
<DataGridTemplateColumn Width="38">
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<TextBlock Margin="5,0,0,0" Text="" />
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<RadioButton HorizontalAlignment="Center" GroupName="List" IsChecked="{Binding DataContext.IsSelected, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}}" />
<CheckBox HorizontalAlignment="Center" IsChecked="{Binding DataContext.IsSelected, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
Datagrid:绑定dgList集合
RadioButton :用来单选,绑定的是dgList集合里的IsSelected字段,切记加上GroupName属性,才有单选效果。
CheckBox :多选,绑定的是dgList集合里的IsSelected字段。
表头全选:
前端代码:
<DataGrid Background="White" Grid.Column="1" Margin="8,0,16,0" Name="dgList" BorderBrush="#DDDDDD" BorderThickness="1" Style="{StaticResource DataGridStyle}" LoadingRow="dgList_LoadingRow"
ItemsSource="{Binding dgList, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
<DataGrid.Columns>
<DataGridTemplateColumn Width="38">
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<CheckBox x:Name="cbAll" IsChecked="{ Binding IsCheckAll}" Click="cbAll_Click" Margin="5,0,0,0" Text="" />
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
</DataGrid.Columns>
</DataGrid>
后台代码:
单击通过勾选数量,来判断全选还是全不选
private void cbAll_Click(object sender, RoutedEventArgs e)
{
var choosedItemCount = _viewModel.dgList.Where(p => p.IsSelected).Count();
var allItemCount = _viewModel.dgList.Count();
var result = choosedItemCount == allItemCount;
_viewModel.dgList.ForEach(p =>
{
p.IsSelected = !result;
});
_viewModel.IsCheckAll = !result;
}
ViewModel中:
增加属性控制勾选
private bool _isCheckAll;
/// <summary>
/// 是否全选
/// </summary>
public bool IsCheckAll
{
get { return _isCheckAll; }
set { SetProperty(ref _isCheckAll, value); }
}