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