2016-05-05 20 views
1

Ich implementiere ein Auswahlfeld alle Kontrollkästchen in Datagrid in WPF mit 'MVVM' Muster. Das Problem, mit dem ich konfrontiert bin, besteht darin, das Kontrollkästchen "Alle auswählen" zu aktivieren. Alle Kontrollkästchen werden aktiviert, aber erst nach dem Scrollen in der Bildlaufleiste. Wie behebe ich dieses Problem?Datagrid nicht ordnungsgemäß aktualisiert, aktualisiert beim Scrollen

Scrollen nach unten nach der Überprüfung 'Alle wählen'

[

Und wieder nach oben zurück

Scrollen [

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

XAML-Code

<DataGrid Grid.Row="0" ItemsSource="{Binding Path=UsecaseListItems, Mode=OneWay, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}" AutoGenerateColumns="False" Name="MyDataGrid" 
      CanUserAddRows="False" > 
     <DataGrid.Columns> 
      <DataGridCheckBoxColumn Binding="{Binding Path=IsSelected,UpdateSourceTrigger=PropertyChanged, Mode=TwoWay,IsAsync=True}" Width="50"> 
       <DataGridCheckBoxColumn.HeaderTemplate> 
        <DataTemplate x:Name="dtAllChkBx"> 
         <CheckBox Name="cbxAll" Content="All" IsChecked="{Binding Path=DataContext.AllSelected,RelativeSource={RelativeSource AncestorType=UserControl },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> 
+0

Bitte zeigen Sie den Code, der die Einstellung des Kontrollkästchens, sowie das XAML für das DataGrid. – toadflakz

+1

benachrichtigt Ihre reportListItemModel.IsSelected-Eigenschaft die geänderte Eigenschaft? Ich schätze, dass es nicht so ist. – Muds

Antwort

0

Dieses Verhalten habe ich beobachtet, wenn das in den DataGrid Zeilen (in diesem Fall UseCase) dargestellte Modell INotifyPropertyChanged nicht implementiert. Sie werden während des Scrollens aktualisiert, da sie neu gezeichnet werden und die neuen Werte aus den Eigenschaften zu diesem Zeitpunkt gelesen werden.

Verwandte Themen