2014-07-14 2 views
0

J'utilise DataGridCell.Slected pour faire certaines choses dans mon code.Comment attacher à l'événement DataGridCell.Selected dans le comportement?

<DataGrid DataGridCell.Selected="ArticlesGrid_OnSelected> 

Et dans mon code derrière j'ai une méthode comme

private void ArticlesGrid_OnSelected(object sender, RoutedEventArgs e) 
{ 
    .... 
} 

Mais je veux utiliser un comportement à la place et je n'ai aucune idée comment attacher à l'événement dans mon comportement.

public class MyBehavior : Behavior<DataGrid> 
    { 
     protected override void OnAttached() 
     { 
      //don't know how to attach to the event 
     } 

     protected override void OnDetaching() 
     { 

     } 
} 

Pour tester j'ai utilisé ce code dans ma méthode OnAttached.

EventManager.RegisterClassHandler(AssociatedType, DataGridCell.SelectedEvent, new RoutedEventHandler(ArticlesGrid_OnSelected)); 

Mais je ne sais pas comment supprimer ce gestionnaire d'événement dans ma méthode OnDetaching.

Répondre

0

Vous obtenez la cible du comportement dans la propriété AssociatedObject. Ainsi, vous pouvez faire quelque chose comme ceci:

public class MyBehavior : Behavior<DataGrid> 
{ 
    protected override void OnAttached() 
    { 
     AssociatedObject.SelectionChanged += MyEventHandler; 
    } 

    protected override void OnDetaching() 
    { 
     AssociatedObject.SelectionChanged -= MyEventHandler; 
    } 

    protected void MyEventHandler(object sender, SelectionChangedEventArgs e) { 
     // Do stuff 
    } 
} 

Xaml

<DataGrid> 
    <i:Interaction.Behaviors> 
     <local:MyBehavior/> 
    </i:Interaction.Behaviors> 
</DataGrid> 
+0

Je sais que sur le AssociatedObject mais je ne suis pas sûr si votre événement est le même que je utilise dans le XAML. –

+0

C'est vrai, c'est un événement différent. Il n'est pas aussi simple de s'y abonner à partir du comportement car ce n'est pas dans l'arborescence visuelle (par opposition à DataGrid). Pour ce faire, vous pouvez vous EventTrigger http://www.codeproject.com/Articles/125188/Using-EventTrigger-in-XAML-for-MVVM-No-Code-Behind –

+0

J'ai utilisé le EventManager pour obtenir le même événement mais Je ne sais pas si c'est un bon moyen (édité mon premier post pour le montrer). Serait sympa d'utiliser un comportement parce que je veux avoir ce comportement dans d'autres DataGrids et un comportement est agréable et facile à attacher. –

Questions connexes