使用DataGrid标头中的CheckBox选中所有CheckBox

时间:2018-10-11 10:51:47

标签: xaml

之前提出的这个问题有所不同。

我通过将CheckBox放在DatagridTemplateColumn的Header部分中来检查CellTemplate中的所有CheckBox,来实现“卖所有”方案。

令我惊讶的是,当我在CellTemplate部分中放置绑定时,例如

IsChecked =“ {绑定IsChecked,ElementName = headerCheckBox,Mode = OneWay}”

它工作正常,但是当我反向操作时,例如,将绑定放在HeaderTemplate中,例如

IsChecked =“ {Binding IsChecked,ElementName = chkSelectAll,= OneWay}”

CellTemplate中的CheckBoxes未被选中。

有没有代码的想法吗?

    <Window x:Class="MainWindow"
          xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
          Title="MainWindow" Height="350" Width="525"
          xmlns:sys="clr-namespace:System;assembly=mscorlib" 
          xmlns:col="clr-namespace:System.Collections;assembly=mscorlib" 
         >

      <Window.Resources>
         <col:SortedList x:Key="DummyEntries">
             <sys:String x:Key="1">Line 1</sys:String>
             <sys:String x:Key="2">Line 2</sys:String>
             <sys:String x:Key="3">Line 3</sys:String>
             <sys:String x:Key="4">Line 4</sys:String>
             <sys:String x:Key="5">Line 5</sys:String>
         </col:SortedList>
     </Window.Resources>
    <Grid>


        <DataGrid Width="300" AutoGenerateColumns="False" EnableRowVirtualization="True" 
                  ItemsSource="{Binding Source={StaticResource DummyEntries}}" RowDetailsVisibilityMode="VisibleWhenSelected" ScrollViewer.CanContentScroll="True">
            <DataGrid.Columns>
                <DataGridTemplateColumn>
                    <DataGridTemplateColumn.Header>
                        <CheckBox Content=" Slect All- Option 1" x:Name="headerCheckBox" />
                    </DataGridTemplateColumn.Header>
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <CheckBox Name="chkSelectAll" IsChecked="{Binding IsChecked, ElementName=headerCheckBox, Mode=OneWay}" />
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>

                <DataGridTemplateColumn>
                    <DataGridTemplateColumn.Header>
                        <CheckBox Content=" Slect All - Option 2" IsChecked="{Binding IsChecked, ElementName=chkSelectAll, 
                                  Mode=OneWay}" />
                    </DataGridTemplateColumn.Header>
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <CheckBox Name="chkSelectAll" />
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>

            </DataGrid.Columns>
        </DataGrid>


    </Grid>
</Window>

0 个答案:

没有答案