次の方法で共有


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 して、2 つの架空のイベント ClockwiseSpin に WeakEvent パターンのサポートを提供し、 CounterclockwiseSpin それぞれが専用 WeakEventManager の (示されていません) を持っています。 この実装では、サポートされている各イベントのクラス ハンドラー スタブを呼び出し、イベント データをキャストします (この場合、2 つのイベントはイベント データ型を共有します 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 基づいてイベントの ID を確認した後、実装でプライベート クラス ハンドラーを呼び出す必要があります。 クラス ハンドラーは、送信者のイベントに を += 追加する従来のイベント パターンを通じて追加されるリスナーのイベントを処理するために使用されるのとまったく同じクラス ハンドラーである可能性があります。 次の例では、大まかな実装テンプレートを示します。

適用対象

こちらもご覧ください