IWeakEventListener.ReceiveWeakEvent(Type, Object, EventArgs) メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
中央のイベント マネージャーからイベントを受信します。
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 して、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 を確認した後、実装でプライベート クラス ハンドラーを呼び出す必要があります。 クラス ハンドラーは、送信者のイベントに を +=
追加する従来のイベント パターンを通じて追加されるリスナーのイベントを処理するために使用されるのとまったく同じクラス ハンドラーである可能性があります。 次の例では、大まかな実装テンプレートを示します。
適用対象
こちらもご覧ください
.NET