我最近一直在使用Caliburn.Micro框架。我有一个ShellView和两个屏幕,我们称之为ScreenOne和ScreenTwo。我试图将数据从ScreenOne传递到ScreenTwo。我在网上广泛关注,我不敢相信这很难找到。有谁知道怎么做?
答案 0 :(得分:4)
一种替代方法是使用Event Aggregator并使用发布/订阅技术在屏幕之间进行通信。在event aggregator tutorial中有一个示例,其中两个视图模型都发布自己的事件并订阅其他视图模型的事件。该示例在一个源代码示例 HelloEventAggregator 中进一步阐述。
答案 1 :(得分:3)
假设您的ShellViewModel
是指挥,并且引用了ScreenOneViewModel
和ScreenTwoViewModel
,您可以将数据传递给构建点的视图模型(即当您将这些视图模型实例化为构造函数参数,或者在以后通过公共方法或属性实例化。
使用视图模型工厂的示例:
public class ShellViewModel : Conductor<IScreen>.Collection.OneActive
{
private readonly IScreenOneViewModelFactory screenOneViewModelFactory;
private readonly IScreenTwoViewModelFactory screenTwoViewModelFactory;
public ShellViewModel(
IScreenOneViewModelFactory screenOneViewModelFactory,
IScreenTwoViewModelFactory screenTwoViewModelFactory)
{
this.screenOneViewModelFactory = screenOneViewModelFactory;
this.screenTwoViewModelFactory = screenTwoViewModelFactory;
var screenOneViewModel = this.screenOneViewModelFactory.CreateViewModel();
this.ActivateItem(screenOneViewModel);
}
public void MyMethod()
{
// Get data from screen one
var myData = this.screenOneViewModel.Data;
// Create a screen two view model from the screen one data
var screenTwoViewModel =
this.screenTwoViewModelFactory.CreateViewModel(myData);
this.ActivateItem(screenTwoViewModel);
}
}