如何在closures视图时传回数据

我有一个ViewModel有一个打开另一个视图的命令:

public ICommand OpenAnotherViewCommand { get { return new MvxCommand(() => ShowViewModel<AnotherViewModel>()); } } 

到现在为止还挺好。 然后在AnotherViewModel我想能够回到第一个视图模型。 最初我做了这样的事情:

 public ICommand ReturnCommand { get { Dictionary<string, string> parameters = new Dictionary<string, string>(); // Add some stuff from this model to pass to the first view model return new MvxCommand(() => { ShowViewModel<FirstViewModel>(parameters); } } } 

我添加了一个InitFromBundle到我的第一个视图模型,这也工作。 然而,然后我意识到,我原来的第一视图模型仍然存在(我注意到这是因为一些事件处理程序似乎是多次射击!)。 我的ShowViewModel创build了一个新的FirstViewModel ,但旧的从未被破坏(现在看起来非常明显)。 所以现在的视图堆栈现在是first -> another -> first时候应该是first

所以面对过后,我把我的ShowViewModelClose(this)换成了ReturnCommand ,现在我已经解决了导航问题,而且我没有产生一长串不需要的视图模型。 但是,我已经失去了将数据从AnotherViewModel传回第一个的能力。

那么如何在第二个closures模式下将数据传回给我的第一个视图模型呢?

1

正如你可能已经知道,你总是可以在你的视图模型中使用一个variables的forms,这是从另一个视图模型访问。 例如使用一个静态variables。 但是,当你要在应用程序中重复使用这种模式时,这不是一个好的做法。

2

在你的情况下,我认为你可以从MvvmCross Messenger插件中受益。 有关实现的更多信息,请参阅MvvmCross N + 1中的N = 9。 示例源代码也可以在这里find 。

通过使用信使插件,那么很容易。 您只需在closures子视图之前发布消息。 父视图已经订阅接收这种消息,其余的应该是直截了当的。