【问题标题】:How to get all column header checkbox selected in datagrid when I click on a checkbox which is not a part of datagrid in wpf?当我单击不属于 wpf 中数据网格的复选框时,如何在数据网格中选中所有列标题复选框?
【发布时间】:2014-03-01 12:36:00
【问题描述】:

我有一个列表框,我在其中添加了两个控件,即一个复选框和一个并排的数据网格作为列表框项。我是通过以下方式完成的:

在代码后面:
listBox1.items.Add(dt)

这里 dt 是表名。

在 Xaml 中:

<ListBox Grid.Row="0" AlternationCount="2" MinHeight="305" HorizontalAlignment="Stretch"  Name="listBox1" VerticalAlignment="Stretch" MinWidth="537" >            
        <ListBox.ItemTemplate>                
            <DataTemplate>                    
                    <StackPanel Name="stkPanel" MinHeight="80" MinWidth="500" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="40"/>
                            <ColumnDefinition Width="Auto"/>
                        </Grid.ColumnDefinitions>
                        <DataGrid Grid.Column="1" 
                                  AutoGenerateColumns="True" 
                                  MinHeight="75" 
                                  HorizontalAlignment="Center" 
                                  Name="dataGrid1" 
                                  VerticalAlignment="Stretch" 
                                  MinWidth="470" 
                                  MaxWidth="900" 
                                  ItemsSource="{Binding}" 
                                  IsReadOnly="True" Background="#E6BAB7B7">
                            <DataGrid.ColumnHeaderStyle>
                                <Style TargetType="DataGridColumnHeader">
                                    <Setter Property="ContentTemplate">
                                        <Setter.Value>
                                            <DataTemplate>
                                                <CheckBox Name="colCheckBox" Content="{Binding}"/>
                                            </DataTemplate>
                                        </Setter.Value>
                                    </Setter>
                                </Style>
                            </DataGrid.ColumnHeaderStyle>
                        </DataGrid>
                        <CheckBox  Grid.Column="0" Height="35" Width="25" Name="IsDone" HorizontalAlignment="Right" VerticalAlignment="Center" Checked="IsDone_Checked" />
                        </Grid>                        
                </StackPanel>                   
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox> 

现在,当我选中“IsDone”复选框(即 listboxitem 的一部分)时,应针对该特定列表框项行检查数据网格(也是列表框项)列标题中存在的所有复选框。如果未选中数据网格列标题中的任何复选框,则还应同时取消选中“已完成”复选框。您能建议我怎么做吗?

提前致谢

【问题讨论】:

    标签: wpf datagrid controls


    【解决方案1】:

    Element Binding,这将解决问题..

    <DataTemplate>                    
                    <StackPanel Name="stkPanel" MinHeight="80" MinWidth="500" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="40"/>
                            <ColumnDefinition Width="Auto"/>
                        </Grid.ColumnDefinitions>
                        <DataGrid Grid.Column="1" 
                                  AutoGenerateColumns="True" 
                                  MinHeight="75" 
                                  HorizontalAlignment="Center" 
                                  Name="dataGrid1" 
                                  VerticalAlignment="Stretch" 
                                  MinWidth="470" 
                                  MaxWidth="900" 
                                  ItemsSource="{Binding}" 
                                  IsReadOnly="True" Background="#E6BAB7B7">
                            <DataGrid.ColumnHeaderStyle>
                                <Style TargetType="DataGridColumnHeader">
                                    <Setter Property="ContentTemplate">
                                        <Setter.Value>
                                            <DataTemplate>
                                                <CheckBox Name="colCheckBox" IsChecked="{Binding IsChecked, ElementName=IsDone, Mode=OneWay}" Content="{Binding}"/>
                                            </DataTemplate>
                                        </Setter.Value>
                                    </Setter>
                                </Style>
                            </DataGrid.ColumnHeaderStyle>
                        </DataGrid>
                        <CheckBox  Grid.Column="0" Height="35" Width="25" x:Name="IsDone" HorizontalAlignment="Right" VerticalAlignment="Center" Checked="IsDone_Checked" />
                        </Grid>                        
                </StackPanel>                   
            </DataTemplate>
    

    【讨论】:

    • 您好 Sankarann,感谢您的回答。但是有一个小问题。当我点击“IsDone”复选框时,列标题中的所有复选框都被选中。这工作正常。但是,如果未选中数据网格列标题中存在的任何复选框,则所有复选框都将被取消选中。我需要的只是取消选中我想取消选中的特定列标题复选框以及“IsDone”复选框。
    • 设置BindingMode=OneWay..这不会更新源和其他..检查更新的答案..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-12
    • 2020-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-27
    • 2015-08-12
    相关资源
    最近更新 更多