Caliburn.Micro-如何激活导体以外的类别的项目
本文关键字:项目 Micro- 何激活 激活 Caliburn | 更新日期: 2023-09-27 17:58:04
我已经编写了Caliburn.Micro应用程序的UI,这样工具栏按钮就有了自己的View和ViewModel。
在我看到的示例中,为了激活一个新屏幕,shell中的一个方法调用Conductor.ActivateItem
,传入viewmodel实例,但在我的例子中,ToolbarButtonViewModel.Submit()
方法位于不是shell的类上。
从类激活屏幕的最佳方式是什么,而不是从shell激活屏幕?
您应该考虑使用EventAggregator。创建一个由主导体处理的消息,并从工具栏vm发送该消息。当主指挥收到消息时,激活它指定的屏幕。
这听起来像是视图模型间通信(工具栏视图模型和外壳视图模型之间)的情况。根据您希望代码的松散耦合程度,您可以:
- 使用标准.NET事件。假设
ShellViewModel
引用了ToolBarViewModel
实例,则在ShellViewModel
中订阅ToolBarViewModel
的事件以检测提交,并将新的屏幕实例传递给代理实例 - 使用中介模式(例如Caliburn.Micro中包含的
EventAggregator
)。在ShellViewModel
中订阅事件,并在ToolBarViewModel
中发布事件 - 实际上,在
ShellViewModel
中执行ToolBarViewModel
(可能您必须使用Conductor<T>.Collection.AllActive
类型)。ToolBarViewModel
将是Screen
,并具有Parent
属性(是的,这很难看)