3

我最近一直在使用 Caliburn.Micro 框架。我有一个 ShellView 和两个屏幕,我们称它们为 ScreenOne 和 ScreenTwo。我正在尝试将数据从 ScreenOne 传递到 ScreenTwo。我已经在网上广泛查看,我不敢相信这很难找到。有谁知道如何做到这一点?

4

2 回答 2

4

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

于 2012-06-26T16:42:09.953 回答
3

假设您ShellViewModel是一个导体,并且同时引用了ScreenOneViewModeland 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);           
    }
}
于 2012-06-26T15:17:10.860 回答