Udostępnij za pośrednictwem


IWeakEventListener.ReceiveWeakEvent(Type, Object, EventArgs) Metoda

Definicja

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.

e
EventArgs

Dane zdarzenia.

Zwraca

Boolean

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 SpinEventArgsdanych 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.

Dotyczy

Zobacz też