2013-02-17 7 views
13

ho nel mio modello (Classe X) Proprietà booleana: IsSelected, è collegato ad un WPF DataGrid come segue:IsSelected Legatura in WPF DataGrid

<DataGrid SelectedIndex="{Binding SelectedXIndex,Mode=TwoWay}" 
      DataContext="{Binding MyViewModel}" 
      ItemsSource="{Binding ListX}" AutoGenerateColumns="False"> 
    <DataGrid.RowStyle> 
     <Style TargetType="{x:Type DataGridRow}"> 
      <Setter Property="IsSelected" 
        Value="{Binding IsSelected, Mode=TwoWay, 
          UpdateSourceTrigger=PropertyChanged}"/> 
     </Style> 
    </DataGrid.RowStyle> 
</DataGrid> 

ListX - ObservableCollection

IsSelecte - Chiama per NotifyPropertyChange

Funziona benissimo.

Ma quando ho un sacco di righe, che ho bisogno di scorrere per vederle, e premo il pulsante "Seleziona tutto" che esegue la seguente funzione, lui mi sceglie solo alcune delle righe e non tutte: (anche se tutte le IsSelected sulla lista è vero)

public void SelectAll() 
{ 
    ListX.All(c => c.IsSelected = true); 
} 

non riesco a capire perché questo sta accadendo?

+0

Hai visto [questa domanda] (http://stackoverflow.com/q/2068130/620360) dal Sezione correlata? – LPL

+0

@LPL Non mi ha aiutato, le risposte non hanno avuto successo. E sto parlando dei dati di ritorno da viewModel a XMAL e quella domanda è l'opposto –

risposta

12

questo è quello che mi ha aiutato, infine:

ho messo in DataGrid:

VirtualizingStackPanel.VirtualizationMode="Standard" 
+1

Se è necessario utilizzare la modalità di riciclaggio (I do), un'altra opzione è un comportamento/codebehind collegato che monitora l'evento OnSelectedCellsChanged della griglia e reagisce aggiornando le macchine virtuali (de) selezionate come indicato (sarà necessario eseguire anche l'inverso se si desidera il collegamento bidirezionale). – dlf