IWeakEventListener.ReceiveWeakEvent(Type, Object, EventArgs) Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Riceve gli eventi dal gestore degli eventi centralizzato.
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
Parametri
- managerType
- Type
Il tipo di WeakEventManager che chiama questo metodo.
- sender
- Object
Oggetto che ha originato l'evento.
Dati dell'evento.
Restituisce
true
se il listener ha gestito l'evento. Viene considerato un errore dalla WeakEventManager gestione in WPF per registrare un listener per un evento che il listener non gestisce. In ogni caso, il metodo deve restituire false
se riceve un evento che non riconosce o gestisce.
Esempio
L'esempio seguente implementa per fornire il supporto del modello WeakEvent per due eventi ipotetici ReceiveWeakEvent e CounterclockwiseSpin
che ognuno ha un modello dedicato WeakEventManager (non mostrato).ClockwiseSpin
Questa implementazione chiama gli stub del gestore della classe per ogni evento supportato, eseguendo il cast dei dati dell'evento ( in questo caso i due eventi condividono un tipo di SpinEventArgs
dati dell'evento ). L'implementazione restituisce false
se l'evento ricevuto non è uno previsto.
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
Note per gli implementatori
Questo metodo è destinato a ricevere tutti gli eventi possibili in cui il ricevitore si trova in un elenco di listener. In particolare se l'implementazione per una classe in ascolto per più di un evento, è necessario controllare il tipo del parametro in ingresso managerType
per sapere quale evento corrisponde alla chiamata. Questo è il motivo per cui ogni evento che fa parte del modello deve avere un oggetto dedicato WeakEventManager. Inoltre, il e
parametro viene digitato come generale EventArgs. Pertanto, per ottenere eventuali proprietà specifiche dai dati dell'evento, l'implementazione dovrà eseguire il cast nel tipo di dati di evento specifico.
In genere, dopo aver verificato l'identità dell'evento in base al WeakEventManager tipo, l'implementazione deve chiamare un gestore di classi private. Il gestore della classe potrebbe essere probabilmente lo stesso gestore di classi usato per gestire tale evento per i listener aggiunti tramite il modello di evento convenzionale di aggiunta tramite +=
l'evento al mittente. La sezione di esempio seguente fornisce un modello di implementazione approssimativa.