2016-05-06 2 views
0

Я работаю над флажком «Выбрать все» в заголовке datagrid в wpf, используя шаблон mvvm. При щелчке на флажке все флажки проверяются, а при его открытии происходит обратное. Но я не могу извлечь и привязать выбранные элементы к модели просмотра.выбрать все привязки checkbox в 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"); 
     } 
    } 
+0

где код для привязки выбранных элементов? что вы здесь точно хотите? – Muds

+0

Я хочу, чтобы выбранные значения флажка сохранялись в IEnumerable строк в модели представления –

+0

UsecaseListItems.Where (p => p.IsSelected); --- Это нечто большее? – Muds

ответ

0

С вашего кода, не будет никакого прямого связывания выбранных элементов. Поскольку все ваши флажки привязывались к headerCheckBox.IsChecked.

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

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

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

Смежные вопросы