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 類型檢查事件的身分識別之後,您的實作應該呼叫私用類別處理常式。 您的類別處理常式可能是非常相同的類別處理常式,用來處理透過傳送者上事件新增 += 至事件的傳統事件模式所新增的接聽程式。 下列範例區段提供粗略的實作範本。

適用於

另請參閱