3

我已经编写了我的 Caliburn.Micro 应用程序的 UI,这样工具栏按钮就有了自己的 View 和 ViewModel。

在我看到的示例中,要激活新屏幕,shell 调用中的一个方法Conductor.ActivateItem,传入 viewmodel 实例,但在我的情况下,该ToolbarButtonViewModel.Submit()方法位于不是shell 的类上。

从shell 以外的激活屏幕的最佳方法是什么?

4

2 回答 2

14

您应该考虑使用 EventAggregator。创建主要指挥处理的消息并从工具栏 vm 发送。当主要指挥收到消息时,激活它指定的屏幕。

于 2011-06-01T12:12:16.947 回答
1

这听起来像是视图模型间通信(在工具栏视图模型和外壳视图模型之间)的情况。根据您希望代码的松散耦合程度,您可以:

  1. 使用标准 .NET 事件。假设ShellViewModel有对该ToolBarViewModel实例的引用,则订阅 中的ToolBarViewModel' 事件ShellViewModel以检测提交,并将新的屏幕实例传递给委托实例。
  2. 使用中介模式(例如EventAggregatorCaliburn.Micro 中包含的)。在 中订阅事件ShellViewModel,并在 中发布事件ToolBarViewModel
  3. 实际上进行ToolBarViewModelin ShellViewModel(大概你必须使用Conductor<T>.Collection.AllActive类型)。然后ToolBarViewModel将是 aScreen并且有一个Parent属性(是的,这很丑)。
于 2011-06-01T11:52:35.093 回答