繁体   English   中英

如何在选择数据网格WPF的复选框标头时编写代码以选择/取消选择所有复选框?

[英]How do I write code to select/unselect all checkbox on selecting checkbox header of data grid WPF?

在WPF中使用数据网格时,我面临的问题很少。 以前,我对Windows表单很满意。

我在数据网格中添加了一个复选框列,并在标题中添加了一个复选框。

现在,如何在选择复选框标题时编写代码以选择/取消选择所有复选框?

我尝试了其他帖子中所有可能的答案,但无法成功。 我在某个地方有点困惑。

<DataGrid AutoGenerateColumns="True" Height="204" HorizontalAlignment="Left" Margin="38,162,0,48" Name="dataGrid1" VerticalAlignment="Stretch" Width="729" AreRowDetailsFrozen="False"  EnableColumnVirtualization="False" IsManipulationEnabled="False" CanUserAddRows="False" AutoGeneratingColumn="dataGrid1_AutoGeneratingColumn" RowHeight="26" ColumnHeaderHeight="26" FontSize="15">
    <DataGrid.Columns>
        <DataGridCheckBoxColumn >
            <DataGridCheckBoxColumn.Header>
                <CheckBox Name="SelectAll" ></CheckBox>
            </DataGridCheckBoxColumn.Header>
        </DataGridCheckBoxColumn>
    </DataGrid.Columns>
</DataGrid>

接下来我该怎么办?

在WPF中,应该使用数据绑定。 因此,在您的情况下,您应该将数据的bool属性绑定到HeaderCheckBox ,然后将其绑定到集合中的每个项目:

<DataGridCheckBoxColumn Binding="{Binding IsSelected, Mode=TwoWay}">
    <DataGridCheckBoxColumn.Header>
        <CheckBox Name="SelectAll" IsChecked="{Binding AreAllCheckBoxesChecked, 
            RelativeSource={RelativeSource AncestorType={x:Type YourPrefix:YourWindow}}}" />
</DataGridCheckBoxColumn>

在此示例中,集合中的项目将需要具有IsSelected属性才能将数据绑定到DataGridCheckBoxColumn而后面的视图模型或代码将需要AreAllCheckBoxesChecked属性来将数据绑定到Header Checkbox.IsChecked属性。 然后,只需更新IsSelected属性的设置器中每个集合项的AreAllCheckBoxesChecked属性即可:

public bool AreAllCheckBoxesChecked
{
    get { return areAllCheckBoxesChecked; }
    set 
    {
        areAllCheckBoxesChecked = value;
        foreach (YourDataType item in YourCollection)
        {
            item.IsSelected = value;
        }
        NotifyPropertyChanged("AreAllCheckBoxesChecked"); 
    }
}

如果您遵循MVVM,则需要将复选框绑定到VM的某些属性,如果不遵循,则可以为Isselected而不是IsSelected提供事件处理程序,以处理已检查和未检查的事件。

<DataGridTemplateColumn>
                            <DataGridTemplateColumn.HeaderTemplate>
                                <DataTemplate>
                                    <CheckBox IsChecked="{Binding SelectAll}"/>
                                </DataTemplate>
                            </DataGridTemplateColumn.HeaderTemplate>
                            <DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                    <CheckBox IsChecked="{Binding IsSelected}"/>
                                </DataTemplate>
                            </DataGridTemplateColumn.CellTemplate>
                        </DataGridTemplateColumn>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM