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

事件数据。

返回

如果侦听器已对事件进行了处理,则为 true。 WPF 中的处理将侦听器注册侦听器视为一个错误 WeakEventManager ,而侦听器不处理该事件。 无论如何,如果此方法接收到它未能识别或处理的事件,它都应该返回 false

示例

以下示例实现 ReceiveWeakEvent ,以便为两个假设事件提供 WeakEvent 模式支持,并且CounterclockwiseSpin每个事件ClockwiseSpin都有一个专用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 类型检查事件的标识后,实现应调用私有类处理程序。 可想而知,类处理程序可以是用于处理侦听器事件的类处理程序,这些侦听器是通过 添加到发送方上的 事件的传统事件模式添加 += 的。 以下示例部分提供了大致的实现模板。

适用于

另请参阅