1

我有一个 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为 in之后ReturnCommandClose(this)我已经解决了导航问题,并且我没有生成一长串不需要的视图模型。但是,我失去的是将数据从AnotherViewModel第一个传回的能力。

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

4

1 回答 1

2

1

正如您可能已经知道的那样,您始终可以在视图模型中使用一种形式的变量,该变量可以从另一个视图模型访问。例如使用静态变量。但是,imo 这不是一个好习惯,特别是当您要在应用程序中重复此模式时。

2

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

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

于 2013-08-15T06:50:39.223 回答