2012-09-14 38 views
1

在我的wpf應用程序中,我有幾個用戶控件,其中一個是用於選擇特定數據類型的TreeView。當selectedItem發生變化時,我發佈了一個selectionChanged事件(使用Prism的EventAggregator),訂閱者將獲得此事件。到現在爲止還挺好。普通用戶控件中的棱鏡事件聚合器

現在,我開始在新視圖中使用相同的用戶控件,在新窗口中執行。當從新窗口觸發selectionChanged事件時,兩個訂閱都會被觸發。我想指定事件的發送者,以便訂閱者可以檢查事件的目標用戶。有很多方法可以做到這一點,但目前爲止我都不喜歡。

所以問題出在你們身上,我該如何做到這一點?

回答

1

實現此目的的最簡單方法是將發件人添加到發佈的事件參數中。如你所說

public class SelectionChangedEventArgs 
{ 
    public object Sender { get; set; } 

    // Other properties (e.g. SelectedItem, etc.) 
} 

然後,你可以很容易地查看發件人知道你是否應該處理該事件。棱鏡已經提供了這樣的功能,與Subscribe以下過載:

public virtual SubscriptionToken Subscribe(Action<TPayload> action, 
              ThreadOption threadOption, 
              bool keepSubscriberReferenceAlive, 
              Predicate<TPayload> filter); 

所以,實際上你可以提供一個過濾器訂閱時檢查Sender財產,所以當這個條件被滿足您的處理程序纔會被調用。

+0

@Furnes是的,'SelectionChangedEventArgs'對象將包含您發佈的所有數據,包括'Sender'屬性。 –