다음을 통해 공유


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 이벤트의 ID를 확인한 후 구현에서 프라이빗 클래스 처리기를 호출해야 합니다. 클래스 처리기는 발신자의 이벤트를 통해 += 추가하는 기존의 이벤트 패턴을 통해 추가되는 수신기에 대해 해당 이벤트를 처리하는 데 사용되는 것과 동일한 클래스 처리기일 수 있습니다. 다음 예제 섹션에서는 대략적인 구현 템플릿을 제공합니다.

적용 대상

추가 정보