Xamarin MVVMVIEWModels之间的交叉通信

Xamarin MVVMVIEWModels之间的交叉通信,xamarin,mvvmcross,Xamarin,Mvvmcross,我是MvvmCross和Xamarin的新手。我已经对此进行了一段时间的研究,我正在试图找到将一些数据从ViewModel B发送到ViewModel A的最佳方式。这意味着ViewModel A负责显示ViewModel B。在启动ViewModel时,如何将数据发送到ViewModel B是一个相当简单的问题,但是,我遇到的没有明确定义的教程演示如何在完成时将数据发送回起始ViewModel 我遇到过像MvvmCross.Messenger这样的事件聚合器,它似乎是一个理想的候选对象。然而对

我是MvvmCross和Xamarin的新手。我已经对此进行了一段时间的研究,我正在试图找到将一些数据从ViewModel B发送到ViewModel A的最佳方式。这意味着ViewModel A负责显示ViewModel B。在启动ViewModel时,如何将数据发送到ViewModel B是一个相当简单的问题,但是,我遇到的没有明确定义的教程演示如何在完成时将数据发送回起始ViewModel

我遇到过像MvvmCross.Messenger这样的事件聚合器,它似乎是一个理想的候选对象。然而对于一个Android项目,由于Android活动生命周期方法的原因,我不确定这是否是一个好的选择


在此方面的任何帮助都将不胜感激。多谢各位

信使是正确的方法,它已在中介绍过。甚至还有一个示例代码可以玩弄

要点是,两个ViewModel都接收一个(可能是单例)Messenger,当ViewModelB希望让ViewModelA重新加载其数据时,ViewModelB会通过Messenger发送一条消息。
Messenger内部使用WeakReference来确保垃圾收集仍然可以继续(请检查),听起来您想要做的是显示一个VM,以便将特定结果返回到“父”VM。这是通过StartActivityForResult在Android中实现的,但需要一些黑客操作才能通过MvvmCross实现


Greg Shackles写了一篇关于如何实现这一点的文章。进一步讨论。如果我正确理解您的用例,它比使用messenger更适合Android活动流程。

非常感谢,我也在看Stuart Lodge的视频。N=12封面详细介绍了这一点。对于其他任何关注这一点并作为参考的人,请参阅这是一个很好的资源。我查看了Greg Shackles的实现,他自己也承认它部分工作。我写这篇文章的原因是,当MvvmCross.Messenger存在时,为什么Greg需要这样做?这不是一个合适的实现吗?Messenger是谜题的一部分,但就其本身而言,它并没有给您提供任何帮助期望的“模态”VM打开、收集所需输入、然后关闭自身并返回结果、错误或取消的行为。它所提供的只是发送消息的功能,仅此而已。是的,我对此进行了研究,当然Messenger本身什么也不做。不过,为它提供了一个实现,可以从一个视图模式发送消息另一方面,我仍然不明白为什么当一个信使可以有效地用于同样的目的时,格雷格的实现被建议。