Sdílet prostřednictvím


IWeakEventListener.ReceiveWeakEvent(Type, Object, EventArgs) Metoda

Definice

Přijímá události z centralizovaného správce událostí.

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 volání této metody.

sender
Object

Objekt, který událost vznikl.

e
EventArgs

Data události

Návraty

true pokud naslouchací proces zpracovával událost. Zpracování ve WPF považuje za chybu WeakEventManager registrace naslouchacího procesu pro událost, kterou naslouchací proces nezpracuje. Bez ohledu na to by metoda měla vrátit false , pokud obdrží událost, kterou nerozpozná nebo nezpracuje.

Příklady

Následující příklad implementuje ReceiveWeakEvent podporu vzoru WeakEvent pro dvě hypotetické události ClockwiseSpin a CounterclockwiseSpin každá z nich má vyhrazenou WeakEventManager (nezobrazuje se). Tato implementace volá zástupné procedury obslužné rutiny třídy pro každou podporovanou událost a přetypuje data události (v tomto případě obě události sdílejí datový typ SpinEventArgsudálosti ). Implementace vrátí, false pokud přijatá událost není očekávaná.

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

Poznámky pro implementátory

Tato metoda je určena pro příjem všech možných událostí, kde je příjemce v seznamu naslouchacího procesu. Zejména při implementaci pro třídu, která naslouchá více než jedné události, musíte zkontrolovat typ příchozího managerType parametru, abyste věděli, které události odpovídá volání. To je důvod, proč každá událost, která má být součástí vzoru, musí mít vyhrazený WeakEventManager. e Parametr je také zadán jako obecný EventArgs. Proto, aby se z dat události získaly nějaké konkrétní vlastnosti, bude vaše implementace muset přetypovat na konkrétní datový typ události.

Obvykle po kontrole identity události na WeakEventManager základě typu, by implementace měla volat privátní obslužnou rutinu třídy. Vaše obslužná rutina třídy by mohla být velmi stejná obslužná rutina třídy, která se používá ke zpracování této události pro naslouchací procesy, které jsou přidány prostřednictvím vzoru konvenční události přidání via += do události odesílatele. Následující příklad oddíl obsahuje hrubou šablonu implementace.

Platí pro

Viz také