0

4 つの列を含むデータ テーブルを作成しました。3 つは文字列で、もう 1 つはブール型です。wpfでdatatable(xmldatadocument)をdatagridviewにマッピングしました。その結果、データ グリッドのテキスト列とチェックボックス列が表示されます。そして、チェックボックスの列ヘッダーにチェックボックスのヘッダー テンプレートを追加しました。ヘッダーのチェックボックスがオフの場合、列のすべてのチェックボックスをオフにすることができます。ヘッダーのチェックボックスがチェックされている場合、列のすべてのチェックボックスをチェックすることもできます。 . スクリーンショット、XAML、およびコードを以下に追加しました。

データグリッドビュー

PS: WPF データグリッドを使用します。

<dg:DataGrid.Columns>
                <dg:DataGridCheckBoxColumn Binding="{Binding Check}" Width="50" >
                    <dg:DataGridCheckBoxColumn.HeaderTemplate>
                        <DataTemplate x:Name="dtAllChkBx">
                            <CheckBox Name="cbxAll" Content="{x:Static properties:Resources.lblAll}" Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked"></CheckBox>
                        </DataTemplate>
                    </dg:DataGridCheckBoxColumn.HeaderTemplate>


public static ObservableCollection<Lst> list = new ObservableCollection<Lst>();
private void CheckBox_Checked(object sender, RoutedEventArgs e)
{
    for (int i = 0; i < list.Count; i++)
    {
        list[i].Check = true;
    }
}

private void CheckBox_Unchecked(object sender, RoutedEventArgs e)
{
    for (int i = 0; i < list.Count; i++)
    {
        list[i].Check = false;
    }
}

public class Lst : ObservableCollection<Lst>
{
    public bool Check { get; set; }
}  
4

1 に答える 1

0

ヘッダーのコントロール テンプレートは次のとおりです。

<Style x:Key="checkBoxHeaderStyle"
                           TargetType="{x:Type w:DataGridColumnHeader}">
                                                    <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="{x:Type w:DataGridColumnHeader}">
                                    <CheckBox 
                                              IsChecked="{Binding  Path = IsSelectAllChecked , Mode = TwoWay}"/>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>

スタイルを適用するテンプレート列は次のとおりです

<w:DataGridTemplateColumn MinWidth="50"
                                              HeaderStyle="{DynamicResource checkBoxHeaderStyle}"
                                              CanUserResize="False">
                        <w:DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <CheckBox Name="selectAllCheckBox"
                                                                  HorizontalAlignment="Center"                                              Margin="1,0,0,0"                                                                                            VerticalAlignment="Center"
                                          IsChecked="{Binding Path = IsSelected, Mode=TwoWay}" />
                            </DataTemplate>
                        </w:DataGridTemplateColumn.CellTemplate>
                    </w:DataGridTemplateColumn>

選択されたプロパティは

public bool IsSelected
{
    get { return selected; }
    set { selected = value;
    OnPropertyChanged("IsSelected");
    }
}

ヘッダチェックボックスの場合

public bool IsSelectAllChecked
        {
            get { return isSelectAllChecked; }
            set
            {
                isSelectAllChecked = value;
                base.OnPropertyChanged("IsSelectAllChecked");
//Call the method which sets the IsSelected property to true of false, based on value
                SetAllCheckBoxesState(value);
            }

    }

私はそれが役立つことを願っています:)

于 2012-04-19T12:28:45.967 に答える