IWeakEventListener.ReceiveWeakEvent(Type, Object, EventArgs) Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Empfängt Ereignisse vom zentralen Ereignis-Manager.
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
Parameter
- managerType
- Type
Der Typ des WeakEventManager, der diese Methode aufruft.
- sender
- Object
Das Objekt, das das Ereignis ausgelöst hat.
Ereignisdaten.
Gibt zurück
true
, wenn das Ereignis vom Listener behandelt wurde. Es wird als Fehler durch die WeakEventManager Behandlung in WPF betrachtet, um einen Listener für ein Ereignis zu registrieren, das der Listener nicht behandelt. Die Methode sollte jedoch unabhängig davon false
zurückgeben, wenn ein Ereignis empfangen wird, das nicht erkannt oder nicht behandelt werden kann.
Beispiele
Im folgenden Beispiel wird die Unterstützung von WeakEvent-Mustern ReceiveWeakEvent für zwei hypothetische Ereignisse ClockwiseSpin
implementiert und CounterclockwiseSpin
die jeweils über ein dediziertes (nicht dargestellt) verfügen WeakEventManager . In dieser Implementierung werden Klassenhandler-Stubs für jedes unterstützte Ereignis aufgerufen, die Ereignisdaten übergeben (in diesem Fall teilen die beiden Ereignisse einen Ereignisdatentyp SpinEventArgs
). Die Implementierung gibt zurück false
, wenn das empfangene Ereignis nicht einer ist, der erwartet wird.
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
Hinweise für Ausführende
Diese Methode soll alle möglichen Ereignisse empfangen, bei denen sich der Empfänger in einer Listenerliste befindet. Insbesondere wenn Sie eine Klasse implementieren, die mehr als ein Ereignis anhört, müssen Sie den Typ des eingehenden managerType
Parameters überprüfen, um zu wissen, welchem Ereignis der Aufruf entspricht. Deshalb muss jedes Ereignis, das Teil des Musters sein soll, über ein dediziertes WeakEventManagerEreignis verfügen. Außerdem wird der e
Parameter als allgemein EventArgseingegeben. Damit Sie bestimmte Eigenschaften aus den Ereignisdaten abrufen können, müssen Ihre Implementierung in den spezifischen Ereignisdatentyp casten.
Normalerweise sollte Ihre Implementierung nach der Identität des Ereignisses basierend auf dem WeakEventManager Typ einen privaten Klassenhandler aufrufen. Ihr Klassenhandler könnte möglicherweise der gleiche Klassenhandler sein, der zum Behandeln dieses Ereignisses für Listener verwendet wird, die über das herkömmliche Ereignismuster hinzugefügt werden, das dem Ereignis auf dem Absender hinzugefügt +=
wird. Im folgenden Beispielabschnitt wird eine grobe Implementierungsvorlage bereitgestellt.