IWeakEventListener.ReceiveWeakEvent(Type, Object, EventArgs) Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Recibe los eventos del administrador de eventos centralizado.
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
Parámetros
- managerType
- Type
Tipo de la clase WeakEventManager que llama a este método.
- sender
- Object
Objeto que originó el evento.
Datos de evento
Devoluciones
Es true
si el agente de escucha controló el evento. El control de WPF considera un error WeakEventManager para registrar un agente de escucha para un evento que el agente de escucha no controla. De todos modos, el método debe devolver false
si recibe un evento que no reconoce o no controla.
Ejemplos
En el ejemplo siguiente se implementa para proporcionar compatibilidad con patrones WeakEvent para dos eventos hipotéticos ReceiveWeakEvent y CounterclockwiseSpin
que cada uno tiene un dedicado WeakEventManager (no se ClockwiseSpin
muestra). Esta implementación llama a códigos auxiliares del controlador de clases para cada evento admitido, convirtiendo los datos del evento (en este caso, los dos eventos comparten un tipo SpinEventArgs
de datos de evento ). La implementación devuelve false
si el evento recibido no es uno que se espera.
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
Notas a los implementadores
Este método está pensado para recibir todos los eventos posibles en los que el receptor se encuentra en una lista de agentes de escucha. Especialmente si se implementa para una clase que escucha más de un evento, debe comprobar el tipo del parámetro entrante managerType
para saber a qué evento corresponde la llamada. Este es el motivo por el que cada evento que forma parte del patrón debe tener un objeto dedicado WeakEventManager. Además, el e
parámetro se escribe como general EventArgs. Por lo tanto, para obtener las propiedades específicas de los datos del evento, la implementación tendrá que convertir al tipo de datos de evento específico.
Normalmente, después de comprobar la identidad del evento en función del WeakEventManager tipo, la implementación debe llamar a un controlador de clase privada. El controlador de clases podría ser, posiblemente, el mismo controlador de clase que se usa para controlar ese evento para los agentes de escucha que se agregan a través del patrón de evento convencional de agregar +=
a través del evento en el remitente. En la sección de ejemplo siguiente se proporciona una plantilla de implementación aproximada.