WPF:DataGrid获取选中的列

时间:2013-09-05 07:51:54

标签: wpf datagrid

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

enter image description here

如何确定选中了哪个复选框?

1 个答案:

答案 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中,您可以拥有(字符串)列表。在命令处理程序中,您可以更新该列表以包含选中/取消选中哪个标题的复选框

由于