Xamarin MvvmCross将数据从一个viewmodel传递到另一个viewmodel

Xamarin MvvmCross将数据从一个viewmodel传递到另一个viewmodel,xamarin,viewmodel,mvvmcross,Xamarin,Viewmodel,Mvvmcross,我正在开发Xamarin Android应用程序。我正在使用MvvmCross模式创建ViewModels 现在,我想将数据从一个ViewModel传递到另一个ViewModel,但不想导航到该ViewModel。我想导航到另一个ViewModel,而不是导航到该ViewModel e、 g:我有三个ViewModelsV1、V2和V3。现在我想将数据从V1传递到V2,但想导航到V3 可能吗 查看MvvmCross Messenger以执行此操作: 您需要在viewmodel上订阅某些内容: p

我正在开发Xamarin Android应用程序。我正在使用
MvvmCross
模式创建
ViewModels

现在,我想将数据从一个
ViewModel
传递到另一个ViewModel,但不想导航到该
ViewModel
。我想导航到另一个
ViewModel
,而不是导航到该
ViewModel

e、 g:我有三个
ViewModels
V1、V2和V3。现在我想将数据从V1传递到V2,但想导航到V3


可能吗

查看MvvmCross Messenger以执行此操作:

您需要在viewmodel上订阅某些内容:

public class LocationViewModel 
: MvxViewModel
{
private readonly MvxSubscriptionToken _token;

public LocationViewModel(IMvxMessenger messenger)
{
    _token = messenger.Subscribe<LocationMessage>(OnLocationMessage);
}

private void OnLocationMessage(LocationMessage locationMessage)
{
    Lat = locationMessage.Lat;
    Lng = locationMessage.Lng;
}

// remainder of ViewModel
}
公共类LocationViewModel
:MvxViewModel
{
私有只读MvxSubscriptionToken(令牌);
公共位置视图模型(IMvxMessenger messenger)
{
_令牌=messenger.Subscribe(OnLocationMessage);
}
专用void OnLocationMessage(LocationMessage LocationMessage)
{
Lat=位置信息。Lat;
Lng=位置信息。Lng;
}
//ViewModel的其余部分
}

最简单的方法是使用from MvvmCross。您可以在V2中订阅某种消息,并在V1中发布该消息,然后在单独的步骤中导航到V3

// subscribing to a certain message type
this.logoutToken = this.messenger.Subscribe<LogoutMessage>(this.HandleLogoutMessage);

// Creating and sending a message
var logoutMessage = new LogoutMessage(this, "You have been logged out.");
this.messenger.Publish(logoutMessage);
//订阅某种消息类型
this.logoutToken=this.messenger.Subscribe(this.HandleLogoutMessage);
//创建和发送消息
var logoutMessage=new logoutMessage(这是“您已注销”);
this.messenger.Publish(logoutMessage);

注意:必须将
MessageToken
分配给成员变量(如另一个答案中所示),否则它将被垃圾收集器清除。

除了上述messenger插件之外,我建议您将需要共享的数据保存在“服务”中,作为由MvvmCross管理的单例类的服务:

CreatableTypes()
    .EndingWith("Service")
    .AsInterfaces()
    .RegisterAsLazySingleton();
在视图模型中,只需将该单例添加到构造函数中,即可使用该单例:

public WhateverViewModel(IService service)
该服务将是单例的,因此您的数据将在整个应用程序生命周期中保持不变

因此,在其中一个视图模型中,您可以执行以下操作:

service.SharedData = new SharedData();
在另一个视图模型中:

this.data = service.SharedData