2011-06-01 75 views
3

我組成了我的Caliburn.Micro應用程序的UI,使工具欄按鈕具有自己的View和ViewModel。Caliburn.Micro - 如何ActivateItem從導體以外的類

在我見過的例子,來激活一個新的屏幕,在殼方法調用Conductor.ActivateItem,通過在視圖模型的實例,但在我的情況下ToolbarButtonViewModel.Submit()方法是一類的貝殼。

從類中激活屏幕的最佳方式是什麼?其他比shell更好嗎?

回答

13

您應該考慮使用EventAggregator。創建一條消息,由主要指揮人員處理並從工具欄vm發送它。當主要售票員收到消息時,激活它指定的屏幕。

1

這聽起來像是一個視圖間通信的情況(在工具欄視圖模型和shell視圖模型之間)。根據您希望代碼的鬆散耦合程度,您可以:

  1. 使用標準.NET事件。假設ShellViewModel參考ToolBarViewModel實例,請訂閱ShellViewModel中的ToolBarViewModel的事件來檢測提交,並將新屏幕實例傳遞給委託實例。
  2. 使用中介模式(例如Caliburn.Micro中包含的EventAggregator)。訂閱在ShellViewModel事件,併發布在ToolBarViewModel
  3. 事件在ShellViewModel實際上進行ToolBarViewModel(想必你將不得不使用Conductor<T>.Collection.AllActive型)。 ToolBarViewModel然後將是Screen並具有Parent屬性(是的,這是醜陋的)。
+0

Ooooh EventAggregator!現在可以做到這一點... :) – 2011-06-01 11:55:19