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
Объект, в котором произошло событие.
Данные события.
Возвращаемое значение
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 основе типа реализация должна вызывать обработчик частного класса. Обработчик классов может быть очень тем же обработчиком классов, который используется для обработки этого события для прослушивателей, добавляемых с помощью стандартного шаблона события добавления +=
в событие отправителя. В следующем примере представлен пример шаблона реализации.