2016-05-05 2 views
1

This is what i want Ich arbeite an wpf mvvm datagrid und versuchen, das Kontrollkästchen alle mit dem View-Modell zu binden. Es gibt mir kein richtiges Ergebnis. Ich gebe meinen Code Details hier (XAML-Code und die Ansicht Modellcode)alles Kontrollkästchen in Datagrid Header nicht richtig funktioniert in wpf mvvm

<DataGrid Grid.Row="0" ItemsSource="{Binding Path=UsecaseListItems}" AutoGenerateColumns="False" Name="MyDataGrid" 
      CanUserAddRows="False" > 
     <DataGrid.Columns> 
      <DataGridCheckBoxColumn Binding="{Binding IsSelected}" Width="50" > 
       <DataGridCheckBoxColumn.HeaderTemplate> 
        <DataTemplate x:Name="dtAllChkBx"> 
         <CheckBox Name="cbxAll" Content="All" IsChecked="{Binding Path=DataContext.AllSelected,RelativeSource={RelativeSource AncestorType=DataGrid},Mode=TwoWay}"/> 
        </DataTemplate> 
       </DataGridCheckBoxColumn.HeaderTemplate> 
      </DataGridCheckBoxColumn> 
      <DataGridTemplateColumn Header="Name" Width="SizeToCells" IsReadOnly="True"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <TextBlock Text="{Binding UsecaseName}" /> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
     </DataGrid.Columns> 
    </DataGrid> 


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

     } 
    } 


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

Ihr Code scheint falsch zu sein. Warum willst du es an ein Viewmodel binden? Warum versuchen Sie nicht, das Kontrollkästchen an das Header-Kontrollkästchen isChecked zu binden? – ViVi

Antwort

0

Seit allselected Eigenschaft im Hinblick Modell haben Sie AncestorType in Fenster oder Benutzersteuerung statt Datenraster geben ...

+0

Es funktioniert immer noch nicht für mich :( –

+0

Kannst du updatesourcetrigger = true? –

+0

Das Hauptproblem ist, wenn ich es überprüfe, ist die Hälfte der Liste (die unten unter Teil der Bildlaufleiste ist) nur überprüft und dann wieder Ich scrolle es nach oben, der Rest der Checkboxen sind überprüft. –

0

Triggerereignis prüfen OnPropertyChanged("IsSelected");. Anstatt dies zu verwenden, geben Sie OnPropertyChanged("AllSelected");. Geben Sie auch Vorfahrentyp in Fenster oder Benutzer-Steuerelement, was auch immer es sein mag ...

Verwandte Themen