如何选择WPF DataGrid中列的所有复选框被DataGrid标题的CheckBox [英] How to Select All CheckBox of a Column by DataGrid Header CheckBox in WPF DataGrid
本文介绍了如何选择WPF DataGrid中列的所有复选框被DataGrid标题的CheckBox的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个CheckBoxColumn一个DataGrid。在CheckBoxColumn的头我添加了一个复选框以选择该DataGrid行的所有复选框。
我怎样才能做到这一点?
我的XAML代码WPF的数据网格:
<数据网格的AutoGenerateColumns =FALSECanUserAddRows =FALSE Grid.RowSpan =2HEIGHT =130的HorizontalAlignment =左IsReadOnly =FALSE保证金=189,340,0,0NAME =dgCandidate的TabIndex =7VerticalAlignment =评出的WIDTH =466 Grid.Row =1>
< DataGrid.Columns>
< DataGridTextColumn X:NAME =colCandidateID绑定={结合CandidateID}标题=SlNo了minWidth =20IsReadOnly =真/>
< DataGridTextColumn X:NAME =colRegistraion绑定={结合RegisterNo}标题=注册号。 IsReadOnly =真/>
< DataGridTextColumn X:NAME =colCandidate绑定={结合CandidateName}标题=名称了minWidth =250IsReadOnly =真/>
< DataGridTemplateColumn>
< DataGridTemplateColumn.Header>
<复选框名称=chkSelectAll选中=chkSelectAll_Checked未选中=chkSelectAll_Unchecked>< /复选框>
< /DataGridTemplateColumn.Header>
< DataGridTemplateColumn.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}>
< DataGrid.Columns>
< DataGridTextColumn标题=ID绑定={结合CandidateID}/>
< DataGridTextColumn标题=RegNr绑定={结合RegisterNo}/>
< DataGridTextColumn标题=名称绑定={结合CandidateName}/>
< DataGridTemplateColumn>
< DataGridTemplateColumn.Header>
<复选框选中=CheckBox_Checked未选中=CheckBox_Checked>< /复选框>
< /DataGridTemplateColumn.Header>
< DataGridTemplateColumn.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屋!
查看全文