0

我有一个绑定到 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"];

    }

标头模板:

   <DataTemplate x:Key="HeaderTemplate"
                  x:Name="HeaderTemplate">
        <CheckBox></CheckBox>
    </DataTemplate>

在此处输入图像描述

如何确定选择了哪些复选框?

4

1 回答 1

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>

并将您的自动生成处理程序更新为:

            e.Column.Width = new DataGridLength(_columnWidth);
            e.Column.Header = e.PropertyName;
            e.Column.HeaderStyle = (Style)Resources["HeaderStyle"];

所以在这里您可以将复选框的命令绑定到您的视图模型命令,并发送可以是标题的唯一命令参数。在视图模型中,您可以拥有(字符串)列表。在命令处理程序中,您可以更新该列表以包含选中/未选中哪个标题的复选框

谢谢

于 2013-09-05T08:00:03.770 回答