IWeakEventListener.ReceiveWeakEvent(Type, Object, EventArgs) Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Odbiera zdarzenia od scentralizowanego menedżera zdarzeń.
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
Parametry
- managerType
- Type
Typ WeakEventManager wywołania tej metody.
- sender
- Object
Obiekt, który pochodzi z zdarzenia.
Dane zdarzenia.
Zwraca
true
jeśli odbiornik obsłużył zdarzenie. Jest on uważany za błąd WeakEventManager przez obsługę w WPF w celu zarejestrowania odbiornika dla zdarzenia, które odbiornik nie obsługuje. Niezależnie od tego metoda powinna zostać zwrócona false
, jeśli otrzyma zdarzenie, które nie rozpoznaje ani nie obsługuje.
Przykłady
Poniższy przykład implementuje ReceiveWeakEvent obsługę wzorca WeakEvent dla dwóch hipotetycznych zdarzeń ClockwiseSpin
i CounterclockwiseSpin
że każdy z nich ma dedykowany WeakEventManager (nie pokazano). Ta implementacja wywołuje wycinki programu obsługi klas dla każdego obsługiwanego zdarzenia, rzutowanie danych zdarzenia (w tym przypadku dwa zdarzenia współużytkuje typ SpinEventArgs
danych zdarzenia). Implementacja zwraca wartość false
, jeśli odebrane zdarzenie nie jest oczekiwane.
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
Uwagi dotyczące implementowania
Ta metoda jest przeznaczona do odbierania wszystkich możliwych zdarzeń, w których odbiornik znajduje się na liście odbiorników. Szczególnie w przypadku implementacji klasy, która nasłuchuje więcej niż jednego zdarzenia, należy sprawdzić typ parametru przychodzącego managerType
, aby wiedzieć, które zdarzenie odpowiada wywołaniu. Dlatego każde zdarzenie, które ma być częścią wzorca, musi mieć dedykowany element WeakEventManager. e
Ponadto parametr jest typowany jako ogólny EventArgs. W związku z tym w celu pobrania jakichkolwiek określonych właściwości z danych zdarzenia implementacja będzie musiała rzutować do określonego typu danych zdarzenia.
Zazwyczaj po sprawdzeniu tożsamości zdarzenia na WeakEventManager podstawie typu implementacja powinna wywołać prywatną procedurę obsługi klas. Procedura obsługi klas może być bardzo tą samą procedurą obsługi klas, która jest używana do obsługi tego zdarzenia dla odbiorników, które są dodawane za pośrednictwem konwencjonalnego wzorca zdarzeń dodawania do +=
zdarzenia na nadawcy. Poniższa przykładowa sekcja zawiera przybliżony szablon implementacji.