MvvmViewModels之间的交叉通信

MvvmCross communication between ViewModels

我是 MvvmCross 和 Xamarin 的新手。我已经研究了一段时间了,我试图找到将一些数据从 ViewModel B 发送到 ViewModel A 的最佳方法。这意味着 ViewModel A 负责显示 ViewModel B。关于如何在启动时将数据发送到 ViewModel,但是我没有遇到明确定义的教程来展示如何在完成时将数据发送回起始 ViewModel。

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

如有任何帮助,我们将不胜感激。谢谢你。

Messenger 是正确的方法,它已在 another stack overflow question 中介绍。甚至还有一个您可以玩弄的示例代码。

大意是两个ViewModel都接收一个(可能是单例的)Messenger,当ViewModelB要让ViewModelA重新加载它的数据时,ViewModelB通过messenger发送消息。 Messenger 在内部使用 Wea​​kReference 来确保垃圾收集仍然可以继续(检查 this post for more information)

听起来您想要做的是显示一个 VM,以便返回给 "parent" VM 的特定结果。这是用 StartActivityForResult 烘焙到 Android 中的,但需要一些黑客才能用 MvvmCross 实现。

Greg Shackles 写了 tutorial on how this can be accomplished. Further discussion here。如果我正确理解您的用例,它比使用 Messenger 更适合 Android activity 流程。