премахнах отметка от всяко едно квадратче за отметка на CellTemplate от списъка, искам да премахна отметката в квадратчето за отметка Header

Създадох таблица с данни, която съдържа 4 колони, 3 са низове, а друга е от булев тип. картографирах datatable(xmldatadocument) към datagridview в wpf. така че резултатът изглежда текстова колона и колона с квадратчета за отметка в мрежата с данни. И добавих шаблон за заглавка на полето за отметка към заглавката на колоната с отметка. Мога да премахна всички квадратчета за отметка в колоната, когато квадратчето за отметка в заглавката не е отметнато. Мога също така да проверя всички квадратчета за отметка в колоната, когато полето за отметка в заглавката е отметнато. но съм малко обезпокоен, ако едно от квадратчетата за отметка в тази колона не е отметнато, трябва да премахна отметката и в квадратчето за отметка в заглавката.. Моля, помогнете ми да разреша това. Добавих екранната снимка, XAML и кода по-долу.

Datagridview

PS: използване на WPF datagrid.

<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; }
}  

person iYadav    schedule 19.04.2012    source източник
comment
не трябва ли да зададете проверката на true при проверено събитие и false при непроверено събитие? ти май си направил обратното. Също така, първият обвързан ли е с колоната на полето за отметка в мрежата?   -  person Akanksha Gaur    schedule 19.04.2012
comment
@Dzire коригирах го. Да, lst е обвързано с колоната на полето за отметка в мрежата.   -  person iYadav    schedule 19.04.2012
comment
Извикали ли сте свойството, променено на свойството, обвързано с колоната на полето за отметка? Опитах в моя край. Свързах и квадратчето за отметка на заглавката и промених свойството, свързано с колоната. работи   -  person Akanksha Gaur    schedule 19.04.2012
comment
@Dzire Можете ли да поставите кода тук. и аз ще опитам от моя страна.   -  person iYadav    schedule 19.04.2012
comment
@user1328637 Моля, внедрите INotifypropertyChanged във вашия клас Lst. Прочетете също нещо на MVVM. Вашият сетер във вашия клас Lstняма Change notification INotifyPropertyChnaged ще ви даде събитие, което можете да повдигнете в сетера във вашия Property Check. И да, в такива случаи обикновено не използваме `Auto property. Моля, променете на Property с резервно поле.   -  person Ankesh    schedule 23.04.2012


Отговори (1)


Ето контролния шаблон за заглавката

<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);
            }

    }

Надявам се да помогне :)

person Akanksha Gaur    schedule 19.04.2012
comment
Какво става, ако lst не е обвързано с колона с квадратчета за отметка в мрежата?? какви промени трябва да направя? Редактирах своя XAML код... моля, проверете. - person iYadav; 19.04.2012
comment
Проверете моя XAML и xaml.cs код и след това ме уведомете какви промени трябва да направя в него. - person iYadav; 19.04.2012
comment
трябва да положите малко усилия, аз ви осигурих всичко. - person Akanksha Gaur; 19.04.2012
comment
Опитах всичко, но не работи :( никой от d форума няма d решение за този проблем. :( - person iYadav; 20.04.2012
comment
Надявам се, че сте обвързали колоната на полето за отметка със свойство Проверка n задайте d режим като двупосочен, дайте ми xaml код на колона с квадратче за отметка - person Akanksha Gaur; 20.04.2012
comment
Забравихте да добавите PropertyChangedEventHander в Setter на свойството Проверка, моля, направете това първо - person Akanksha Gaur; 20.04.2012
comment
‹dg:DataGrid.Columns› ‹dg:DataGridCheckBoxColumn Binding={Binding Check} Width=50 › ‹dg:DataGridCheckBoxColumn.HeaderTemplate› ‹DataTemplate x:Name=dtAllChkBx› ‹CheckBox Name=cbxAccall={Bingeding Element,Modell={Bingeding Element =TwoWay, UpdateSourceTrigger=PropertyChanged} Content={x:Static properties:Resources.lblAll} Checked=CheckBox_Checked Unchecked=CheckBox_Unchecked IsEnabled=True›‹/CheckBox› - person iYadav; 23.04.2012
comment
прочетете за INotifyPropertyChange, трябва да поставите d манипулатор за промяна на свойство в настройката на Check Property. - person Akanksha Gaur; 23.04.2012
comment
Включих PropertyChangedEventHandler Той казва, че SetAllCheckBoxesState(value) не съществува... също така мисля, че имам проблем с обвързването на заглавката на полето за отметка, за да проверя в XAML. къде трябва да включа стил в моя XAML код по-горе? и мога ли да премахна свойството isSelectAllChecked? - person iYadav; 23.04.2012
comment
SetAllCheckBoxesState е персонализиран метод. Вижте внедряването на INotifyPropertyChanged в Google. Трябва да научите abt binding. - person Akanksha Gaur; 23.04.2012
comment
Не мога да дефинирам свойството Style. Проверете моя XAML код... използвахте напълно различни свойства.. Използвах DataGridCheckBoxColumn, HeaderTemplate и DataTemplate, но използвахте DataGridColumnHeader. VS казва, че този тип не е намерен. - person iYadav; 24.04.2012
comment
Учих за Data Binding и INotifyPropertyChanged, сега мога да внедря всичко това. Благодаря. беше полезно. - person iYadav; 25.04.2012