2010-08-23 20 views
2

Je développe un contrôle utilisateur et souhaite utiliser un événement routé. Je remarque qu'il y a deux délégués fournis - RoutedEventHandler et RoutedPropertyChangedEventHandler. Le premier qui ne transmet aucune information, et le second qui prend l'ancienne et la nouvelle valeur d'un changement de propriété. Cependant, je n'ai besoin que d'une seule information, donc je veux l'équivalent d'un délégué d'action. Y a-t-il quelque chose fourni? Puis-je utiliser un délégué d'action?Événements routés dans WPF - utilisation d'un délégué d'action

Répondre

5

Créez une sous-classe de RoutedEventArgs pour stocker vos données supplémentaires et utilisez EventHandler<T> avec votre classe args. Cela sera convertible en RoutedEventHandler et les données supplémentaires seront disponibles dans vos gestionnaires.

Vous pouvez créer une classe RoutedEventArgs générique qui contient un seul paramètre de tout type, mais la création d'une nouvelle classe facilite généralement la lecture du code et facilite sa modification pour inclure davantage de paramètres dans le futur.

public class FooEventArgs 
    : RoutedEventArgs 
{ 
    // Declare additional data to pass here 
    public string Data { get; set; } 
} 

public class FooControl 
    : UserControl 
{ 
    public static readonly RoutedEvent FooEvent = 
     EventManager.RegisterRoutedEvent("Foo", RoutingStrategy.Bubble, 
      typeof(EventHandler<FooEventArgs>), typeof(FooControl)); 

    public event EventHandler<FooEventArgs> Foo 
    { 
     add { AddHandler(FooEvent, value); } 
     remove { RemoveHandler(FooEvent, value); } 
    } 

    protected void OnFoo() 
    { 
     base.RaiseEvent(new FooEventArgs() 
     { 
      RoutedEvent = FooEvent, 
      // Supply the data here 
      Data = "data", 
     }); 
    } 
} 
+0

super, merci, très utile! – devdigital