2017-09-04 33 views
0

也許我實現這是錯誤的,但在這裏,我出來的方法:使用IEventAggregator,是否有可能首先發佈一個事件,然後訂閱它?

我目前正在開發使用MVVM和棱鏡應用,而在登錄對話框和多個模塊:

  1. MainWindowViewModel訂閱了一個事件:_ea.GetEvent<RegisterMenuItemEvent>().Subscribe(AddMenuItem, true);,檢查是否必須將一個模塊名稱添加到列表視圖;
  2. 在啓動時其動態加載的所有模塊從文件夾中:
    • 每個IModule的類偵聽爲LoginEvent:_ea.GetEvent<LoginEvent>().Subscribe(CheckRoles, true);,檢查是否用戶具有導航到模塊的視圖中的許可;
    • 如果符合的話,withing的CheckRoles()方法是發佈該註冊模塊作爲一個列表視圖項的事件:_ea.GetEvent<RegisterMenuItemEvent>().Publish(new MenuItem(null, View, ModuleName, GroupName));
  3. 您登錄
    • 後,註冊模塊,列表視圖菜單項的基礎上,爲每個模塊的給定角色:_ea.GetEvent<LoginEvent>().Publish(new LoginInfo(ctxUser.Username, ctx.UserRole.Where(r => r.UserId == ctxUser.Id).Select(r => r.Role.Name).ToList()));
    • 樹立認證的用戶名來MainWindowView

以上所有內容均按照確切順序執行。

我的問題是,我怎麼可以訂閱已經被公佈?:

  • 這已經在MainWindowViewModel _ea.GetEvent<MessageEvent>().Publish("Username");
  • 這是在視圖模型模塊_ea.GetEvent<MessageEvent>().Subscribe(GetUsername);的執行執行的事件,但它不起作用。
+1

您需要如此訂閱*之前*您發佈。 – mm8

+0

@ mm8所以,我想這是強制性的。 –

+0

是的,如果你想確保不會錯過任何事件,你應該確保你在其他人發佈相同事件之前訂閱。看到我的答案。 – mm8

回答

1

我的問題是,我如何訂閱已發佈的活動?

你不行。那麼,你確實可以訂閱這個活動,但是如果你明白我的意思,你就不會得到任何已經發布的活動。

因此,您需要確保您訂閱之前的活動如果您想確保不會錯過任何活動,任何其他組件都會發布該活動。

+0

好的。謝謝你們的答案。我會嘗試修改我的代碼,使其首先訂閱。 –

相關問題