我最近一直在使用 Caliburn.Micro 框架。我有一个 ShellView 和两个屏幕,我们称它们为 ScreenOne 和 ScreenTwo。我正在尝试将数据从 ScreenOne 传递到 ScreenTwo。我已经在网上广泛查看,我不敢相信这很难找到。有谁知道如何做到这一点?
问问题
1071 次
2 回答
4
一种替代方法是使用事件聚合器并使用发布/订阅技术在屏幕之间进行通信。在事件聚合器教程中有一个示例,其中两个视图模型都发布自己的事件并订阅另一个视图模型的事件。该示例在一个源代码示例HelloEventAggregator中进行了进一步阐述。
于 2012-06-26T16:42:09.953 回答
3
假设您ShellViewModel
是一个导体,并且同时引用了ScreenOneViewModel
and 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 回答