2013-02-17 5 views
13

J'ai dans mon modèle (classe X) Propriété booléenne: IsSelected, est liée à un WPF DataGrid comme suit:IsSelected Reliure dans 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 - Appel à NotifyPropertyChange

Cela fonctionne très bien.

Mais quand j'ai beaucoup de lignes, que j'ai besoin de faire défiler pour les voir, et que j'appuie sur le bouton "Select All" qui exécute la fonction suivante, il me choisit seulement certaines lignes et pas toutes: même si tous les IsSelected sur la liste est vrai)

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

Je ne comprends pas pourquoi cela se passe?

+0

Avez-vous vu [cette question] (http://stackoverflow.com/q/2068130/620360) de la Section connexe – LPL

+0

@LPL Cela ne m'a pas aidé, les réponses n'y ont pas réussi. Et je parle des données de retour de viewModel à XMAL et cette question est le contraire –

Répondre

12

c'est ce qui m'a aidé finalement:

je mets dans le DataGrid:

VirtualizingStackPanel.VirtualizationMode="Standard" 
+1

Si vous avez besoin d'utiliser le mode de recyclage (I do), une autre option est un comportement/codebehind attaché qui surveille l'événement OnSelectedCellsChanged de la grille et réagit en mettant à jour les machines virtuelles (de) sélectionnées comme indiqué (il faudra aussi faire l'inverse si la liaison bidirectionnelle est souhaitée). – dlf