![](/img/trans.png)
[英]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.