2014-04-22 4 views
0

Je ai lié une ObservableCollection à une ItemSource à un DataGrid, cependant, je veux récupérer (via un setter) propriétés individuelles via le ViewModel.Propriétés de liaison WPF à Datagrid

Ok sons confus donc expliquera.

Dans mon ObservableCollection, j'ai une propriété appelée "Actif", donc je veux que cet élément soit défini lorsqu'un utilisateur clique sur ou non sur une case à cocher dans le DataGrid.

de sorte que le XAML

<DataGridTemplateColumn.CellTemplate> 
    <DataTemplate> 
     <CheckBox IsChecked="{Binding Active, Mode=TwoWay}" HorizontalAlignment="Center"></CheckBox> 
    </DataTemplate> 
</DataGridTemplateColumn.CellTemplate> 

Et je veux que cela déclenche ce code dans le ViewModel lorsque la case est cochée ou cochée

private bool m_Active = false; 

public bool Active 
{ 
    get { return m_Active; } 
    set 
    { 
     m_Active = value; 

     OnPropertyChanged("Active"); 
    } 
} 

mais même avec deux modes chemin sur, il n » t. Des raisons pour lesquelles?

Remarque: Sur la propriété SelectedItem du DataGrid, je peux obtenir le SelectedRow, donc, fondamentalement, je veux la propriété individuelle sélectionnée!

Merci

+0

Le datacontext est différent. Le datacontext de la case à cocher sera l'élément de ligne, mais votre propriété est dans votre viewmodel. – Shoe

+0

Je comprends cela, ce qui signifie que je ne peux obtenir la propriété individuelle de l'élément de ligne pour l'ensemble DataContext? – user3428422

Répondre

0

On dirait que vous confondez où le DataGrid est à la recherche de la propriété « active ». Puisque la grille de données est liée à une collection observable, les objets à l'intérieur de la collection observable doivent avoir la propriété 'Active', pas le modèle de vue utilisé pour la vue. Si, toutefois, vous souhaitez réellement lier toutes les lignes d'un DataGrid à une seule propriété sur le modèle de vue, vous devez rechercher l'arborescence des ancêtres pour trouver le contexte de données du contrôle, puis lier à la propriété 'Active':

<CheckBox IsChecked="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.Active, Mode=TwoWay}" HorizontalAlignment="Center"></CheckBox> 

Mais, je pense, vous cherchez à se lier à la propriété « actif » de l'objet dans la collection observable. Vérifiez votre fenêtre de sortie lorsque vous exécutez votre application et vous devriez voir une erreur de liaison si cette propriété n'existe pas sur l'objet.

+0

Salut Josh, La propriété Active est une propriété de la collection Observable. Je dois juste faire une certaine logique de savoir si un utilisateur veut un utilisateur vérifié ou non. Donc, d'après ce que je comprends, l'élément sélectionné sélectionnera une ligne de la collection Observable avec TOUTES les propriétés à l'intérieur. ce qui est génial, mais j'ai juste besoin de savoir pour l'instant si un utilisateur vérifie la propriété active ou non – user3428422

0

Essayez d'utiliser un CellEditingTemplate

<DataGridTemplateColumn.CellEditingTemplate> 
       <DataTemplate> 
        <CheckBox IsChecked="{Binding Active, Mode=TwoWay}" HorizontalAlignment="Center"></CheckBox> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellEditingTemplate> 

espoir qui aide

0

Avez-vous essayé de placer le UpdateSourceTrigger?

<CheckBox IsChecked="{Binding Active, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Center"></CheckBox> 
+0

J'ai, merci, mais je pense que je dois utiliser la liaison relativeSource – user3428422

Questions connexes