在Caliburn.Micro中将值/数据从一个屏幕传递到另一个屏幕

时间:2012-06-26 13:43:10

标签: screen caliburn.micro

我最近一直在使用Caliburn.Micro框架。我有一个ShellView和两个屏幕,我们称之为ScreenOne和ScreenTwo。我试图将数据从ScreenOne传递到ScreenTwo。我在网上广泛关注,我不敢相信这很难找到。有谁知道怎么做?

2 个答案:

答案 0 :(得分:4)

一种替代方法是使用Event Aggregator并使用发布/订阅技术在屏幕之间进行通信。在event aggregator tutorial中有一个示例,其中两个视图模型都发布自己的事件并订阅其他视图模型的事件。该示例在一个源代码示例 HelloEventAggregator 中进一步阐述。

答案 1 :(得分:3)

假设您的ShellViewModel是指挥,并且引用了ScreenOneViewModelScreenTwoViewModel,您可以将数据传递给构建点的视图模型(即当您将这些视图模型实例化为构造函数参数,或者在以后通过公共方法或属性实例化。

使用视图模型工厂的示例:

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);           
    }
}