我已经编写了我的Caliburn.Micro应用程序的UI,这样工具栏按钮就有了自己的View和ViewModel。
在我看过的示例中,要激活新屏幕,shell中的方法调用Conductor.ActivateItem
,传入viewmodel实例,但在我的情况下,ToolbarButtonViewModel.Submit()
方法已启用一个不是 shell的类。
从shell 其他类激活屏幕的最佳方法是什么?
答案 0 :(得分:13)
您应该考虑使用EventAggregator。创建主导体处理的消息并从工具栏vm发送。当主要接收者收到消息时,激活它指定的屏幕。
答案 1 :(得分:1)
这听起来像是视图间模型通信的情况(在工具栏视图模型和shell视图模型之间)。根据您希望代码的松散耦合程度,您可以:
ShellViewModel
具有对ToolBarViewModel
实例的引用,请在ToolBarViewModel
中订阅ShellViewModel
的事件以检测提交,并将新屏幕实例传递给委托实例。EventAggregator
)。订阅ShellViewModel
中的活动,并在ToolBarViewModel
ToolBarViewModel
中的ShellViewModel
(可能您必须使用Conductor<T>.Collection.AllActive
类型)。 ToolBarViewModel
将是Screen
并且具有Parent
属性(是的,这很丑陋)。