选择mvvm中的所有复选框绑定

时间:2016-05-06 07:44:06

标签: wpf checkbox mvvm

我正在使用mvvm模式在wpf中的datagrid标头中选中“全选”复选框。单击该复选框后,将检查所有复选框,并在取消选中时,相反的情况发生。 但我无法获取并将所选项目绑定到视图模型。

我的代码就像这样

 <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 个答案:

答案 0 :(得分:0)

使用您的代码,不会直接绑定所选项目。因为所有复选框都绑定到 macro(check_for_cxx11_compiler _VAR) message(STATUS "Checking for C++11 compiler") set(${_VAR}) if((MSVC AND (MSVC10 OR MSVC11 OR MSVC12 OR MSVC13 OR MSVC14)) OR (CMAKE_COMPILER_IS_GNUCXX AND NOT ${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 4.6) OR (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND NOT ${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 3.1) OR (CMAKE_CXX_COMPILER_ID STREQUAL "Intel" AND NOT ${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 12.0)) set(${_VAR} 1) message(STATUS "Checking for C++11 compiler - available") else() message(STATUS "Checking for C++11 compiler - unavailable") endif() endmacro()

您可以绑定到headerCheckBox.IsChecked,然后找到另一种方法来执行UsecaseListItem.IsSelected

e.g。定义继承selectAll的{​​{1}}并使用UseCase中的上述代码更改每个项目的ObservableObject属性。

或使用AllSelected中的命令(for example)。