ViewModels之间的MvvmCross通信

时间:2015-08-22 21:20:50

标签: xamarin mvvmcross

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

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

对此的任何帮助都将非常感激。谢谢。

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:2)

听起来你想要做的是显示一个特定结果的VM返回到“父”VM。这是通过StartActivityForResult融入Android,但需要一些黑客来实现MvvmCross。

Greg Shackles写了tutorial如何实现这一目标。进一步讨论here。如果我正确理解你的用例,那么它比使用信使更适合Android活动流程。