Caliburn.Micro - 如何从Conductor以外的类激活Item

时间:2011-06-01 11:41:38

标签: c# caliburn.micro

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

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

从shell 其他类激活屏幕的最佳方法是什么?

2 个答案:

答案 0 :(得分:13)

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

答案 1 :(得分:1)

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

  1. 使用标准.NET事件。假设ShellViewModel具有对ToolBarViewModel实例的引用,请在ToolBarViewModel中订阅ShellViewModel的事件以检测提交,并将新屏幕实例传递给委托实例。
  2. 使用中介模式(例如Caliburn.Micro中包含的EventAggregator)。订阅ShellViewModel中的活动,并在ToolBarViewModel
  3. 中发布活动
  4. 实际执行ToolBarViewModel中的ShellViewModel(可能您必须使用Conductor<T>.Collection.AllActive类型)。 ToolBarViewModel将是Screen并且具有Parent属性(是的,这很丑陋)。