IWeakEventListener.ReceiveWeakEvent(Type, Object, EventArgs) Metodo

Definizione

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.

e
EventArgs

Dati dell'evento.

Restituisce

Boolean

true se il listener ha gestito l'evento. Viene considerato un errore dalla WeakEventManager gestione in WPF per registrare un listener per un evento non gestito dal listener. In ogni caso, il metodo deve restituire false se riceve un evento che non riconosce o gestisce.

Esempio

Nell'esempio seguente viene implementato ReceiveWeakEvent per fornire il supporto del pattern WeakEvent per due eventi ipotetici ClockwiseSpin e CounterclockwiseSpin ognuno dei quali dispone di un oggetto dedicato WeakEventManager (non visualizzato). Questa implementazione chiama Stub gestore classi per ogni evento supportato, eseguendo il cast dei dati dell'evento (in questo caso i due eventi condividono un tipo di dati dell'evento SpinEventArgs ). L'implementazione restituisce false se l'evento ricevuto non è quello 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 ha lo scopo di ricevere tutti i possibili eventi in cui il ricevitore si trova in un elenco di listener. In particolare, se si implementa per una classe che è in ascolto di più di un evento, è necessario controllare il tipo del managerType parametro in arrivo per poter stabilire a quale evento corrisponde la chiamata. Questo è il motivo per cui ogni evento che deve far parte del modello deve avere un dedicato WeakEventManager . Inoltre, il e parametro è tipizzato come generale EventArgs . Pertanto, per ottenere le proprietà specifiche dai dati dell'evento, sarà necessario eseguire il cast dell'implementazione al tipo di dati dell'evento specifico.

In genere, dopo aver verificato l'identità dell'evento in base al WeakEventManager tipo, l'implementazione deve chiamare un gestore della classe privata. Il gestore della classe potrebbe essere lo stesso gestore di classi usato per gestire l'evento per i listener aggiunti tramite il modello di evento convenzionale di aggiunta tramite += all'evento sul mittente. Nella sezione di esempio seguente viene fornito un modello di implementazione approssimativa.

Si applica a

Vedi anche