IWeakEventListener.ReceiveWeakEvent(Type, Object, EventArgs) Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Reçoit des événements du gestionnaire d'événements centralisé.
public:
bool ReceiveWeakEvent(Type ^ managerType, System::Object ^ sender, EventArgs ^ e);
public bool ReceiveWeakEvent (Type managerType, object sender, EventArgs e);
abstract member ReceiveWeakEvent : Type * obj * EventArgs -> bool
Public Function ReceiveWeakEvent (managerType As Type, sender As Object, e As EventArgs) As Boolean
Paramètres
- managerType
- Type
Le type du WeakEventManager qui appelle cette méthode.
- sender
- Object
Objet à l'origine de l'événement.
Donnée d’événement.
Retours
true
si l'écouteur a géré l'événement. Il est considéré comme une erreur par la WeakEventManager gestion dans WPF d’inscrire un écouteur pour un événement que l’écouteur ne gère pas. La méthode doit néanmoins toujours retourner la valeur false
si elle reçoit un événement qu'elle ne reconnaît ou ne gère pas.
Exemples
L’exemple suivant implémente pour fournir la prise en charge du modèle WeakEvent pour deux événements hypothétiques ReceiveWeakEventClockwiseSpin
et CounterclockwiseSpin
qui ont chacun un dédié WeakEventManager (non affiché). Cette implémentation appelle des stubs de gestionnaire de classe pour chaque événement pris en charge, en cas de cast des données d’événement (dans ce cas, les deux événements partagent un type SpinEventArgs
de données d’événement ). L’implémentation retourne false
si l’événement reçu n’est pas attendu.
bool IWeakEventListener.ReceiveWeakEvent(Type managerType, object sender, EventArgs e)
{
if (managerType == typeof(ClockwiseSpinEventManager))
{
OnClockwiseSpin(sender, (SpinEventArgs)e);
}
else if (managerType == typeof(CounterclockwiseSpinEventManager))
{
OnCounterclockwiseSpin(sender, (SpinEventArgs)e);
}
else
{
return false; // unrecognized event
}
return true;
}
private void OnClockwiseSpin(object sender, SpinEventArgs e) {
//do something here...
}
private void OnCounterclockwiseSpin(object sender, SpinEventArgs e) {
//do something here...
}
Private Function ReceiveWeakEvent(ByVal managerType As Type, ByVal sender As Object, ByVal e As EventArgs) As Boolean Implements IWeakEventListener.ReceiveWeakEvent
If managerType Is GetType(ClockwiseSpinEventManager) Then
OnClockwiseSpin(sender, CType(e, SpinEventArgs))
ElseIf managerType Is GetType(CounterclockwiseSpinEventManager) Then
OnCounterclockwiseSpin(sender, CType(e, SpinEventArgs))
Else
Return False ' unrecognized event
End If
Return True
End Function
Private Sub OnClockwiseSpin(ByVal sender As Object, ByVal e As SpinEventArgs)
'do something here...
End Sub
Private Sub OnCounterclockwiseSpin(ByVal sender As Object, ByVal e As SpinEventArgs)
'do something here...
End Sub
Notes pour les responsables de l’implémentation
Cette méthode est destinée à recevoir tous les événements possibles lorsque le récepteur se trouve dans une liste d’écouteurs. En particulier, si vous implémentez pour une classe qui écoute plusieurs événements, vous devez vérifier le type du paramètre entrant managerType
afin de savoir à quel événement correspond l’appel. C’est pourquoi chaque événement qui doit faire partie du modèle doit avoir un dédié WeakEventManager. En outre, le e
paramètre est typé en tant que général EventArgs. Par conséquent, pour obtenir des propriétés spécifiques à partir des données d’événement, votre implémentation doit être convertie en type de données d’événement spécifique.
En règle générale, après avoir vérifié l’identité de l’événement en fonction du WeakEventManager type, votre implémentation doit appeler un gestionnaire de classe privé. Votre gestionnaire de classe peut être le même gestionnaire de classe que celui utilisé pour gérer cet événement pour les écouteurs ajoutés via le modèle d’événement conventionnel d’ajout via +=
à l’événement sur l’expéditeur. L’exemple de section suivant fournit un modèle d’implémentation approximatif.