簡體   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