我已经编写了我的 Caliburn.Micro 应用程序的 UI,这样工具栏按钮就有了自己的 View 和 ViewModel。
在我看到的示例中,要激活新屏幕,shell 调用中的一个方法Conductor.ActivateItem
,传入 viewmodel 实例,但在我的情况下,该ToolbarButtonViewModel.Submit()
方法位于不是shell 的类上。
从shell 以外的类激活屏幕的最佳方法是什么?
我已经编写了我的 Caliburn.Micro 应用程序的 UI,这样工具栏按钮就有了自己的 View 和 ViewModel。
在我看到的示例中,要激活新屏幕,shell 调用中的一个方法Conductor.ActivateItem
,传入 viewmodel 实例,但在我的情况下,该ToolbarButtonViewModel.Submit()
方法位于不是shell 的类上。
从shell 以外的类激活屏幕的最佳方法是什么?
您应该考虑使用 EventAggregator。创建主要指挥处理的消息并从工具栏 vm 发送。当主要指挥收到消息时,激活它指定的屏幕。
这听起来像是视图模型间通信(在工具栏视图模型和外壳视图模型之间)的情况。根据您希望代码的松散耦合程度,您可以:
ShellViewModel
有对该ToolBarViewModel
实例的引用,则订阅 中的ToolBarViewModel
' 事件ShellViewModel
以检测提交,并将新的屏幕实例传递给委托实例。EventAggregator
Caliburn.Micro 中包含的)。在 中订阅事件ShellViewModel
,并在 中发布事件ToolBarViewModel
ToolBarViewModel
in ShellViewModel
(大概你必须使用Conductor<T>.Collection.AllActive
类型)。然后ToolBarViewModel
将是 aScreen
并且有一个Parent
属性(是的,这很丑)。