[英]How to Select All CheckBox of a Column by DataGrid Header CheckBox in WPF DataGrid
[英]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
属性绑定到Header
的CheckBox
,然后将其绑定到集合中的每个项目:
<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.