IWeakEventListener.ReceiveWeakEvent(Type, Object, EventArgs) Метод

Определение

Получает события от централизованного диспетчера событий.

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

Параметры

managerType
Type

Тип объекта WeakEventManager, который вызывает этот метод.

sender
Object

Объект, в котором произошло событие.

e
EventArgs

Данные события.

Возвращаемое значение

Boolean

true, если прослушиватель обработал событие. Обработка в WPF считается ошибкой WeakEventManager для регистрации прослушивателя для события, которое прослушиватель не обрабатывает. Вне зависимости от этого, метод должен вернуть false в случае получения события, которое он не может распознать или обработать.

Примеры

В следующем примере реализована ReceiveWeakEvent поддержка шаблона WeakEvent для двух гипотетических событий ClockwiseSpin и CounterclockwiseSpin выделенных WeakEventManager (не показанных). Эта реализация вызывает заглушки обработчиков классов для каждого поддерживаемого события, приведение данных события (в данном случае два события совместно используют тип SpinEventArgsданных события). Реализация возвращается false , если полученное событие не является ожидаемым.

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

Примечания для тех, кто реализует этот метод

Этот метод предназначен для получения всех возможных событий, в которых получатель находится в списке прослушивателя. Особенно при реализации для класса, прослушивающего несколько событий, необходимо проверить тип входящего managerType параметра, чтобы узнать, какое событие соответствует вызову. Именно поэтому каждое событие, которое должно быть частью шаблона, должно иметь выделенный WeakEventManager. Кроме того, e параметр вводится как общий EventArgs. Таким образом, чтобы получить определенные свойства из данных события, реализация должна привести к конкретному типу данных события.

Как правило, после проверки удостоверения события на WeakEventManager основе типа реализация должна вызывать обработчик частного класса. Обработчик классов может быть очень тем же обработчиком классов, который используется для обработки этого события для прослушивателей, добавляемых с помощью стандартного шаблона события добавления += в событие отправителя. В следующем примере представлен пример шаблона реализации.

Применяется к

См. также раздел