ios - 关闭 View 时如何传回数据

标签 ios xamarin mvvmcross

我有一个 ViewModel,它有一个打开另一个 View 的命令:

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

到目前为止,还不错。然后在 AnotherViewModel 中,我希望能够返回到第一个 View 模型。最初我做了这样的事情:

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);
        }
     }
 }

我在我的第一个 View 模型中添加了一个 InitFromBundle,这也奏效了。然而,然后我意识到我原来的第一个 View 模型仍然存在(我注意到这一点是因为一些事件处理程序似乎被多次触发!)。我的 ShowViewModel 创建了一个新的 FirstViewModel,但旧的从未被销毁(现在看起来很明显)。所以 View 堆栈现在是 first -> another -> first 而它应该只是 first

因此,在面对这个问题之后,我将 ReturnCommand 中的 ShowViewModel 替换为 Close(this),现在我已经解决了导航问题而且我不会生成一长串不需要的 View 模型。但是,我失去的是将数据从 AnotherViewModel 传回第一个的能力。

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

最佳答案

1

正如您可能已经知道的,您始终可以在 View 模型中使用一种可从另一个 View 模型访问的变量形式。例如使用静态变量。但是,我认为这不是一个好的做法,特别是当您要在整个应用程序中重复此模式时。

2

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

使用 Messenger 插件就很简单了。您只需在关闭 subview 之前发布一条消息。父 View 已经订阅接收那种消息,其余的应该是直截了当的。

关于ios - 关闭 View 时如何传回数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18216636/

相关文章:

android - Xamarin Forms ListView SelectedItem 以获得正确的值

ios - 将 Google 移动分析与 MVVMCross 集成

ios - 保存 NSNumber 核心数据

ios - 以编程方式在 iOS App 中生成 SSL 证书

objective-c - 如何让 iPhone 的 FMOD 声音在 iPhone 锁定时不暂停?

xamarin.ios - MonoTouch/Xamarin.iOS 中与 UITableViewController/UISearchDisplayController 相关的崩溃

c# - 检测 AVPlayerItem 状态变化

mvvm - 如何导航到扩展抽象类的 ViewModel?

ios - mvvmcross ios 方法绑定(bind) (RIO)

ios - Swift:具有全局变量的属性观察器