如何在关闭视图时将数据传回

时间:2013-08-13 18:36:16

标签: ios xamarin mvvmcross

我有一个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创建了一个新的FirstViewModel,但旧的first -> another -> first从未被销毁过(现在看来非常明显)。因此,当应该只是first时,视图堆栈为ShowViewModel

所以在面对忙碌之后,我用ReturnCommand替换Close(this)中的AnotherViewModel,现在我修复了导航问题,并且我没有产生很长的不必要的视图楷模。但是,我丢失的是能够将数据从{{1}}传回第一个。

那么当第二个数据关闭时,如何将数据传回我的第一个视图模型呢?

1 个答案:

答案 0 :(得分:2)

1

您可能已经知道,您始终可以在视图模型中使用可从其他视图模型访问的变量形式。例如,使用静态变量。但是,如果要在整个应用程序中重复此模式,那么这不是一个好习惯。

2

在您的情况下,我认为您可以从MvvmCross Messenger plugin中受益。查看MvvmCross N+1处的N = 9,了解有关实施的更多信息。还提供了示例源代码here

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