Caliburn.Micro-如何激活导体以外的类别的项目

本文关键字:项目 Micro- 何激活 激活 Caliburn | 更新日期: 2023-09-27 17:58:04

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

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

类激活屏幕的最佳方式是什么,而不是从shell激活屏幕?

Caliburn.Micro-如何激活导体以外的类别的项目

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

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

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