我有一个绑定到Datatable对象的DataGrid。 DataGrid自动生成列。
<DataGrid
Name="TimeTableDataGrid"
AutoGeneratingColumn="TimeTableDataGrid_OnAutoGeneratingColumn"
ItemsSource="{Binding TimeTable,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,IsAsync=True}"
EnableRowVirtualization="True"
EnableColumnVirtualization="True"
VirtualizingStackPanel.IsVirtualizing="True">
</DataGrid>
我使用AutoGeneratingColumn事件在DataGrid列中添加复选框。
private void TimeTableDataGrid_OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
e.Column.Width = new DataGridLength(_columnWidth);
e.Column.HeaderTemplate = (DataTemplate) Resources["HeaderTemplate"];
}
HeaderTemplate:
<DataTemplate x:Key="HeaderTemplate"
x:Name="HeaderTemplate">
<CheckBox></CheckBox>
</DataTemplate>
如何确定选中了哪个复选框?
答案 0 :(得分:1)
您可以为标题创建样式并更新您的复选框,如下所示:
<Style x:Key="HeaderStyle" TargetType="{x:Type DataGridColumnHeader}">
<Style.Setters>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
<CheckBox Command="{Binding DataContext.MyCommand, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" CommandParameter="{TemplateBinding Content}"></CheckBox>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style.Setters>
</Style>
并将您的autogenererating处理程序更新为:
e.Column.Width = new DataGridLength(_columnWidth);
e.Column.Header = e.PropertyName;
e.Column.HeaderStyle = (Style)Resources["HeaderStyle"];
所以在这里你可以将Command for checkbox绑定到你的viewmodel命令,并发送可以是header的唯一命令参数。在viewmodel中,您可以拥有(字符串)列表。在命令处理程序中,您可以更新该列表以包含选中/取消选中哪个标题的复选框
由于