IWeakEventListener.ReceiveWeakEvent(Type, Object, EventArgs) Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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.
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 SpinEventArgs
udá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.