如何将数据传回关闭视图时(How to pass data back in when closing

2019-10-18 11:56发布

我有了打开另一视图的命令的视图模型:

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

所以,面对后在手掌触摸我代替我的ShowViewModelReturnCommandClose(this) ,现在我已经固定的导航问题,我没有产生不必要的视图模型的一长排。 不过,我已经失去了是从传回数据的能力AnotherViewModel到第一个。

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

Answer 1:

1

正如你可能已经知道你总是可以用变量的形式在您的视图模型从另一视图模型进行访问。 例如,使用一个静态变量。 但是,海事组织它不是一个很好的做法特别是当你要在你的应用程序重复这种模式。

2

你的情况,我认为你可以从中受益MvvmCross Messenger的插件 。 看N = 9在MvvmCross N + 1上实现的更多信息。 样本源代码也可以在这里 。

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



文章来源: How to pass data back in when closing a view