Заголовок флажка, чтобы проверить все в mvvm DataGrid - PullRequest
1 голос
/ 17 февраля 2020

Я пытаюсь установить флажок, чтобы выбрать все, но, несмотря на исследования по другим темам, я не понимаю, почему это не работает:

РЕДАКТИРОВАТЬ: проблема в том, что он ищет " Выберите «AllAllAgent» или «selectAllAgentsCommand» в качестве свойства «агента», который является элементом «Источник» моего DG, а не в ViewModel. Можно ли это исправить?

    <DataGrid x:Name="DGagents" Grid.Row="1" Grid.Column="3" Grid.RowSpan="3" Margin="5" AlternationCount="2" ItemContainerStyle="{StaticResource alternatingStyle}" ItemsSource="{Binding Agents}">
        <DataGrid.Columns>
            <DataGridTemplateColumn>
                <DataGridTemplateColumn.Header>
                    <CheckBox Command="{Binding SelectAllAgentCommand}"
      CommandParameter="{Binding IsChecked, RelativeSource={RelativeSource Self}}" PresentationTraceSources.TraceLevel="High"></CheckBox>
                </DataGridTemplateColumn.Header>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <CheckBox IsChecked="{Binding Path=IsSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>

            <DataGridTextColumn Header="Matricule" Width="100" HeaderStyle="{StaticResource CenterGridHeaderStyle}" Binding="{Binding Matricule}" />
            <DataGridTextColumn Header="Nom" Width="120" HeaderStyle="{StaticResource CenterGridHeaderStyle}" Binding="{Binding Nom}"/>
            <DataGridTextColumn Header="Prénom" Width="120" HeaderStyle="{StaticResource CenterGridHeaderStyle}" Binding="{Binding Prenom}"/>
            <DataGridTemplateColumn Header="Matrice" Width="150" HeaderStyle="{StaticResource CenterGridHeaderStyle}">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <ComboBox ItemsSource="{Binding Birthday}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTemplateColumn Header="Semaine" Width="60" HeaderStyle="{StaticResource CenterGridHeaderStyle}">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <ComboBox ItemsSource="{Binding Birthday}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTemplateColumn Header="Période" Width="250" HeaderStyle="{StaticResource CenterGridHeaderStyle}"/>
        </DataGrid.Columns>
    </DataGrid>

мой флажок привязки к "IsSelected" работает отлично, но тот, что в заголовке ни к чему не приводит, я пробовал через команду или через привязку имеет свойство, но ничего не происходит, когда я проверить его, команду или свойство.

private bool _SelectAllAgents;
public bool SelectAllAgents
{
    get
    {
        return _SelectAllAgents;
    }
    set
    {
        _SelectAllAgents = value;
        foreach (AgentModel ag in _Agents)
            ag.IsSelected = value;

        RaisePropertyChanged("SelectAllAgents");
        RaisePropertyChanged("Agents");
    }
}

public RelayCommand SelectAllAgentCommand { get; set; }
SelectAllAgentCommand = new RelayCommand(() => selectAllAgentMethod());

private void selectAllAgentMethod() 
{
    if (SelectAllAgents == true)
    {
        SelectAllAgents = false;
    }
    else
    {
        SelectAllAgents = true;
    }
}

enter image description here

enter image description here

Редактировать 2: Спасибо за помощь ! Это работает:

     IsChecked="{Binding Path=DataContext.SelectAllAgents, 
                RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}" 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...