如何选择WPF DataGrid中列的所有复选框被DataGrid标题的CheckBox [英] How to Select All CheckBox of a Column by DataGrid Header CheckBox in WPF DataGrid

查看:141
本文介绍了如何选择WPF DataGrid中列的所有复选框被DataGrid标题的CheckBox的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个CheckBoxColumn一个DataGrid。在CheckBoxColumn的头我添加了一个复选框以选择该DataGrid行的所有复选框。



我怎样才能做到这一点?



我的XAML代码WPF的数据网格:

 <数据网格的AutoGenerateColumns =FALSECanUserAddRows =FALSE Grid.RowSpan =2HEIGHT =130的Horizo​​ntalAlignment =左IsReadOnly =FALSE保证金=189,340,0,0NAME =dgCandidate的TabIndex =7VerticalAlignment =评出的WIDTH =466 Grid.Row =1> 
< D​​ataGrid.Columns>
< D​​ataGridTextColumn X:NAME =colCandidateID绑定={结合CandidateID}标题=SlNo了minWidth =20IsReadOnly =真/>
< D​​ataGridTextColumn X:NAME =colRegistraion绑定={结合RegisterNo}标题=注册号。 IsReadOnly =真/>
< D​​ataGridTextColumn X:NAME =colCandidate绑定={结合CandidateName}标题=名称了minWidth =250IsReadOnly =真/>

< D​​ataGridTemplateColumn>
< D​​ataGridTemplateColumn.Header>
<复选框名称=chkSelectAll选中=chkSelectAll_Checked未选中=chkSelectAll_Unchecked>< /复选框>
< /DataGridTemplateColumn.Header>
< D​​ataGridTemplateColumn.CellTemplate>
<&DataTemplate的GT;
<复选框X:NAME =colchkSelect1选中=colchkSelect1_Checked未选中=colchkSelect1_Unchecked>< /复选框>
< / DataTemplate中>
< /DataGridTemplateColumn.CellTemplate>
< / DataGridTemplateColumn>

< /DataGrid.Columns>

< / DataGrid的>


解决方案

将您的候选类弄成这个样子:

 公共类考生:DependencyObject的
{
// CandidateID依赖项属性
公众诠释CandidateID
{
{返回(INT)的GetValue(CandidateIDProperty); }
集合{的SetValue(CandidateIDProperty,值); }
}
公共静态只读的DependencyProperty CandidateIDProperty =
DependencyProperty.Register(CandidateID的typeof(INT)的typeof(候选),新UIPropertyMetadata(0));
// RegisterNo依赖项属性
公众诠释RegisterNo
{
{返回(INT)的GetValue(RegisterNoProperty); }
集合{的SetValue(RegisterNoProperty,值); }
}
公共静态只读的DependencyProperty RegisterNoProperty =
DependencyProperty.Register(RegisterNo的typeof(INT)的typeof(候选),新UIPropertyMetadata(0));
// CandidateName依赖项属性
公共字符串CandidateName
{
{返回(串)的GetValue(CandidateNameProperty); }
集合{的SetValue(CandidateNameProperty,值); }
}
公共静态只读的DependencyProperty CandidateNameProperty =
DependencyProperty.Register(CandidateName的typeof(串)的typeof(候选),新UIPropertyMetadata());
// BooleanFlag依赖项属性
公共BOOL BooleanFlag
{
{返回(布尔)的GetValue(BooleanFlagProperty); }
集合{的SetValue(BooleanFlagProperty,值); }
}
公共静态只读的DependencyProperty BooleanFlagProperty =
DependencyProperty.Register(BooleanFlag的typeof(布尔)的typeof(候选),新UIPropertyMetadata(假));
}

在MainWindow.xaml:

 <数据网格的ItemsSource ={结合CandidateList}> 
< D​​ataGrid.Columns>
< D​​ataGridTextColumn标题=ID绑定={结合CandidateID}/>
< D​​ataGridTextColumn标题=RegNr绑定={结合RegisterNo}/>
< D​​ataGridTextColumn标题=名称绑定={结合CandidateName}/>
< D​​ataGridTemplateColumn>
< D​​ataGridTemplateColumn.Header>
<复选框选中=CheckBox_Checked未选中=CheckBox_Checked>< /复选框>
< /DataGridTemplateColumn.Header>
< D​​ataGridTemplateColumn.CellTemplate>
<&DataTemplate的GT;
<复选框器isChecked ={结合BooleanFlag}/>
< / DataTemplate中>
< /DataGridTemplateColumn.CellTemplate>
< / DataGridTemplateColumn>
< /DataGrid.Columns>
< / DataGrid的>

在MainWindow.xaml.cs:

 公共主窗口()
{
的DataContext =这一点;
CandidateList.Add(新考生()
{
CandidateID = 1,
CandidateName =杰克,
RegisterNo = 123,
BooleanFlag = TRUE
});
CandidateList.Add(新考生()
{
CandidateID = 2,
CandidateName =吉姆,
RegisterNo = 234,
BooleanFlag = FALSE
});
的InitializeComponent();
}
//名单观察到的集合
私人的ObservableCollection<候选GT; _candidateList =新的ObservableCollection<候选GT;();
公众的ObservableCollection<候选GT; CandidateList {{返回_candidateList; }}
私人无效CheckBox_Checked(对象发件人,RoutedEventArgs E)
{
的foreach(在CandidateList VAR项)
{
item.BooleanFlag = TRUE;
}
}
私人无效UnheckBox_Checked(对象发件人,RoutedEventArgs E)
{
的foreach(在CandidateList VAR项)
{
项.BooleanFlag = FALSE;
}
}


I have a DataGrid with one CheckBoxColumn. In the header of that CheckBoxColumn I have added a CheckBox to Select all CheckBoxes of that Datagrid Row.

How can I achieve that?

My XAML Code for WPF dataGrid:

    <DataGrid AutoGenerateColumns="False" CanUserAddRows="False"  Grid.RowSpan="2" Height="130" HorizontalAlignment="Left" IsReadOnly="False" Margin="189,340,0,0" Name="dgCandidate" TabIndex="7" VerticalAlignment="Top" Width="466" Grid.Row="1" >
        <DataGrid.Columns>
            <DataGridTextColumn x:Name="colCandidateID" Binding="{Binding CandidateID}" Header="SlNo" MinWidth="20" IsReadOnly="True" />
            <DataGridTextColumn x:Name="colRegistraion" Binding="{Binding RegisterNo}" Header="Reg. No." IsReadOnly="True"  />
            <DataGridTextColumn x:Name="colCandidate" Binding="{Binding CandidateName}" Header="Name" MinWidth="250" IsReadOnly="True"  />

            <DataGridTemplateColumn>
                <DataGridTemplateColumn.Header>
                    <CheckBox Name="chkSelectAll" Checked="chkSelectAll_Checked" Unchecked="chkSelectAll_Unchecked"></CheckBox>
                </DataGridTemplateColumn.Header>
                <DataGridTemplateColumn.CellTemplate >
                    <DataTemplate >
                        <CheckBox x:Name="colchkSelect1" Checked="colchkSelect1_Checked" Unchecked="colchkSelect1_Unchecked" ></CheckBox>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>

        </DataGrid.Columns>

    </DataGrid>

解决方案

Convert your Candidate class into something like this:

public class Candidate : DependencyObject
{
    //CandidateID Dependency Property
    public int CandidateID
    {
        get { return (int)GetValue(CandidateIDProperty); }
        set { SetValue(CandidateIDProperty, value); }
    }
    public static readonly DependencyProperty CandidateIDProperty =
        DependencyProperty.Register("CandidateID", typeof(int), typeof(Candidate), new UIPropertyMetadata(0));
    //RegisterNo Dependency Property
    public int RegisterNo
    {
        get { return (int)GetValue(RegisterNoProperty); }
        set { SetValue(RegisterNoProperty, value); }
    }
    public static readonly DependencyProperty RegisterNoProperty =
        DependencyProperty.Register("RegisterNo", typeof(int), typeof(Candidate), new UIPropertyMetadata(0));
    //CandidateName Dependency Property
    public string CandidateName
    {
        get { return (string)GetValue(CandidateNameProperty); }
        set { SetValue(CandidateNameProperty, value); }
    }
    public static readonly DependencyProperty CandidateNameProperty =
        DependencyProperty.Register("CandidateName", typeof(string), typeof(Candidate), new UIPropertyMetadata(""));
    //BooleanFlag Dependency Property
    public bool BooleanFlag
    {
        get { return (bool)GetValue(BooleanFlagProperty); }
        set { SetValue(BooleanFlagProperty, value); }
    }
    public static readonly DependencyProperty BooleanFlagProperty =
        DependencyProperty.Register("BooleanFlag", typeof(bool), typeof(Candidate), new UIPropertyMetadata(false));
}

in MainWindow.xaml:

<DataGrid ItemsSource="{Binding CandidateList}">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Id" Binding="{Binding CandidateID}"/>
        <DataGridTextColumn Header="RegNr" Binding="{Binding RegisterNo}"/>
        <DataGridTextColumn Header="Name" Binding="{Binding CandidateName}"/>
        <DataGridTemplateColumn>
            <DataGridTemplateColumn.Header>
                <CheckBox Checked="CheckBox_Checked" Unchecked="CheckBox_Checked"></CheckBox>
            </DataGridTemplateColumn.Header>
            <DataGridTemplateColumn.CellTemplate >
                <DataTemplate>
                    <CheckBox IsChecked="{Binding BooleanFlag}"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

in MainWindow.xaml.cs:

    public MainWindow()
    {
        DataContext = this;
        CandidateList.Add(new Candidate()
        {
            CandidateID = 1,
            CandidateName = "Jack",
            RegisterNo = 123,
            BooleanFlag = true
        });
        CandidateList.Add(new Candidate()
        {
            CandidateID = 2,
            CandidateName = "Jim",
            RegisterNo = 234,
            BooleanFlag = false
        });
        InitializeComponent();
    }
    //List Observable Collection
    private ObservableCollection<Candidate> _candidateList = new ObservableCollection<Candidate>();
    public ObservableCollection<Candidate> CandidateList { get { return _candidateList; } }
    private void CheckBox_Checked(object sender, RoutedEventArgs e)
    {
        foreach (var item in CandidateList)
        {
            item.BooleanFlag = true;
        }
    }
    private void UnheckBox_Checked(object sender, RoutedEventArgs e)
    {
        foreach (var item in CandidateList)
        {
            item.BooleanFlag = false;
        }
    }

这篇关于如何选择WPF DataGrid中列的所有复选框被DataGrid标题的CheckBox的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆