выберите все привязки флажков в mvvm

Я работаю над флажком «выбрать все» в заголовке datagrid в wpf с помощью шаблона mvvm. При нажатии на флажок, все флажки проверяются и при распаковке происходит обратное.
Но я не могу извлечь и привязать выбранные элементы к модели представления.

Мой код такой

 <DataGrid Grid.Row="0" Background="LightGray" CanUserAddRows="False"  AutoGenerateColumns="False" HorizontalAlignment="Left" Name="dataGridCustomers" ItemsSource="{Binding Path=UsecaseListItems}" CanUserResizeRows="False">
        <DataGrid.Columns>
             <DataGridTemplateColumn >
                <DataGridTemplateColumn.Header>
                    <CheckBox x_Name="headerCheckBox" IsChecked="{Binding Path=MainWindowViewModel.AllSelected, Mode=TwoWay, 
              UpdateSourceTrigger=PropertyChanged}" Command="{Binding DoStuffCommand}" CommandParameter="{Binding ElementName=UserCaseListControl}"/>
                </DataGridTemplateColumn.Header>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <CheckBox Name="chkSelectAll" HorizontalAlignment="Center" IsChecked="{Binding IsChecked, ElementName=headerCheckBox, Mode=OneWay}" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTextColumn Binding="{Binding Path=UsecaseName}" Header="UsecaseName" IsReadOnly="True" >
                <DataGridColumn.HeaderStyle>
                    <Style TargetType="DataGridColumnHeader">
                    <Setter Property="FontWeight" Value="Bold"/>
                    </Style>
                </DataGridColumn.HeaderStyle>
            </DataGridTextColumn>

ViewModel похож:

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

    private bool _AllSelected;
    public bool AllSelected
    {
        get { return _AllSelected; }
        set
        {
            _AllSelected = value;
            foreach (var reportListItemModel in UsecaseListItems)
            {
                reportListItemModel.IsSelected = this._AllSelected;
                OnPropertyChanged("IsSelected");
            }
            OnPropertyChanged("AllSelected");

        }
    }


    private ObservableCollection<UseCase> _usecaseListItems = new ObservableCollection<UseCase>();
    public ObservableCollection<UseCase> UsecaseListItems
    {
        get { return _usecaseListItems; }
        set {
            _usecaseListItems = value;
            OnPropertyChanged("UsecaseListItems");
        }
    }

1 ответ

  1. В коде не будет прямой привязки выбранных элементов. Как все ваши флажки были привязаны к headerCheckBox.IsChecked.

    Вы можете привязать к вашей UsecaseListItem.IsSelectedвместо, и найти другой способ выполнить selectAll:

    например, определитеUseCase, что наследует ObservableObjectи использует ваш код вышеAllSelected, чтобы изменить IsSelectedсвойство каждого элемента.

    Или используйте команду (например ) в вашем headerCheckBox.