2011-04-03 196 views
0

我創建了一個MainView,它的DataContext是一個在xaml中初始化的MainViewModel。
MainView包含綁定到MainViewModel的Content屬性的ContentControl。
我在MainViewModel構造函數中添加了一些內容,因此如果當前用戶未登錄,它會自動將LoginView(以及相應的DataContext LoginViewModel)加載到此Content內容中。EventAggregation快速入門?

現在的問題是,我該怎麼辦時,用戶成功登錄:

'To be called from the LoginCommand 
Private Sub Login 
    'Do Login 
    If WebContext.Current.User.IsAuthenticated Then 
    ' - Publish a global event to be subscribed and caught from the MainViewModel 
    ' - Close LoginView 
    ' - The MainViewModel should set it's Content property back 
    ' to what the user initially intended to open 
    End If 
End Sub 

這是如何完成的?

注:我更喜歡使用棱鏡的EventAggregator Rathen市的那麼其他的東西,但我不知道:

  1. 如何流傳出來的的ViewModels
  2. 如何創建事件之間(我不需要傳遞參數,我也不需要它是通用的,只是ActionLoginAction - 無參數
  3. 我如何從MainViewMode訂閱
  4. 我不使用MEF或Unity,我也不使用分離式模塊,所有。我的應用程序在一個單一裝配。
  5. 我不喜歡寫代碼隱藏在這兩個VB.NET或C#所有
  6. 回答任何代碼welcommed相同

任何幫助,將推薦

回答

1

你可以去here有關EventAggregator的信息。

你也使用下面的代碼,而無需使用MEF或Unity創建EventAggregator的一個實例:

internal static class EventAggregatorHelper 
{ 
    private static IEventAggregator _Current = new EventAggregator(); 
    public static IEventAggregator Current 
    { 
    get 
    { 
     return _Current; 
    } 
    } 
} 

然後你就可以調用EventAggregator像這樣傳遞所需信息的聚合:

EventAggregatorHelper.Current.GetEvent<SelectedItemChangedEvent>(). 
    Subscribe(HandleSelectedItemChangedEvent); 

在這種情況下,SelectedItemChangedEvent和處理此事件的訂戶。

SelectedItemChangedEvent是聲明一個類,如下圖所示:

public class SelectedItemChangedEvent : CompositePresentationEvent<String> 
{ 
} 

和用戶將是這樣的:

internal void HandleSelectedItemChangedEvent(string viewName) 
{ 
    if (!String.IsNullOrEmpty(viewName)) 
    { 
     //Do whatever you need to do here. 
    } 
} 

到事件聚合鏈接我貼在一開始應明確大部分事情都爲你準備好。

希望這會有所幫助。

+0

感謝您指出'EventAggregator'不依賴於MEF或Unity,我認爲它是由外部引擎維護的。 – Shimmy 2011-04-08 02:25:50

+0

沒問題。我希望它能幫助你。 – MacNET 2011-04-08 10:50:51

+0

請參閱[this](http:// stackoverflow。com/q/5590007/75500「Non-Generic CompositePresentationEvent and EventSubscription?」)相關的問題,您可能會爲其添加一些重要信息。 – Shimmy 2011-04-09 17:36:03