2012-09-24 52 views
0

我有一個ShellWindow它有一個IEventAggregator和我所有的孩子發佈到這個IEventAggregator ?.如何在Caliburn Micro的單個窗口中使用多個IEventAggregator?

現在我有一個名爲JIMSMessage的靜態類,其中我發佈到IEventAggregator的ShellViewModel。

public static class JIMSMessage 
{ 
    public static bool Show(IEventAggregator _events, string message) 
    { 
     _events.Publish(new Message() 
     { 
      MessageValue = message 
     }); 

     return true; 
    }   
} 

我想Show方法的我的返回值來自視圖模型,它調用此方法..

比方說......

我有一個名爲LedgerViewModel視圖模型,這個調用JIMSMessage.Show如下,

JIMSMessage.Show(_events,"Enter Ledger Name."); 

它的工作,但我的MessageWindowViewModel返回的東西,我想回到JIMSMessage類,我怎麼能做到這一點。請幫幫我。

回答

2

我不認爲EventAggregator真的是這樣工作的。它用於爲所有關心接收這些事件的人發佈事件,或者在事件有興趣提醒某事件的時候訂閱事件。

這並不意味着用於調用並在同一方法中等待返回值。

你可以做的是發佈類似ShowMessage事件,並訂閱接收MessageShown事件。

例如,您ShellViewModel可能訂閱接收MessageDisplayed事件的消息並處理這樣的:

public ShellViewModel(IEventAggregator events) 
{ 
    // Subscribe to MessageDisplayed events 
    events.GetEvent<MessageDisplayedEvent>().Subscribe(HandleMessageDisplayed); 
} 

void HandleMessageDisplayed(MessageDisplayedEvent e) 
{ 
    if (e.SomeBooleanProperty) 
     // Do Work 
} 

,並在應用程序中的其他地方,你可以發佈ShowMessage事件顯示一條消息

// Broadcast an Event 
_events.GetEvent<ShowMessageEvent>().Publish(
    new ShowMessageEvent{ Message = "Enter Ledger Name." }); 

無論什麼班級負責顯示消息將訂閱接收ShowMessageEvent,顯示消息,等待用戶反饋,然後廣播一個事件無線當它完成時的結果。

另外如果你有興趣,我寫了a Static class for the EventAggregator,這使得處理PRISM的EventAggregator更簡單。您可能有興趣查看它。

+0

但是我正在使用caliburn micro –

+0

@TheIndianProgrammmer對不起,我不熟悉那個框架,並且不知道他們有一個名爲'EventAggregator'的類。儘管我的答案仍然相同:「EventAggregator」意味着是一個分離的消息傳遞系統,我不認爲它是用來執行諸如撥打電話和等待返回值之類的事情。 – Rachel

相關問題