J'utilise le DataGridCell.Slected pour faire certaines choses dans mon code derrière.
<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 de 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 les tests, 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énements dans ma méthode OnDetaching.
Réponses:
0 pour la réponse № 1Vous obtenez la cible du comportement dans la propriété AssociatedObject. Vous pouvez donc 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>