【问题标题】:How to receive bundle when navigating with Mvvmcross 5.x使用 Mvvmcross 5.x 导航时如何接收捆绑包
【发布时间】:2018-02-02 21:02:04
【问题描述】:

我是 Android 编程的新手。 我选择了 MvvmCross 5.x 作为我的框架。 我想我了解如何发送一个“复杂”对象来自ViewModel的字典(包):

Task Navigate<TParameter>(IMvxViewModel<TParameter> viewModel,
                          TParameter param, 
                          IMvxBundle presentationBundle = null);

我如何接收正在导航到的 ViewModel 中的捆绑包?
也就是说,字典/包调用了什么方法?

【问题讨论】:

    标签: c# navigation mvvmcross


    【解决方案1】:

    您用于导航的presentationBundle 参数是ViewModelRequest 对象的一部分,该对象被传递给MvxViewPresenterShow 方法。您可以在您的平台上创建视图展示器的自定义实现,并使用 PresentationBundle 自定义导航转换的外观或修改导航堆栈。

    查看ViewModelRequest 源代码on GitHubPresentationValues 属性将包含您在导航中传递的包。以下是 Android 上自定义视图展示器的示例实现:

    class CustomViewPresenter : MvxAndroidViewPresenter
    {
        public CustomViewPresenter(IEnumerable<Assembly> androidViewAssemblies)
                  : base(androidViewAssemblies)
        {
        }
    
        public override void Show(MvxViewModelRequest request)
        {
            if (request.PresentationValues.ContainsKey("something"))
            {
                //handle presentation value
            }
            base.Show(request);
        }
    }
    

    您可以在使用 ViewModelRequest 的演示者中覆盖更多方法,然后您可以在其中访问 PresentationValues 属性。这些是特定于每个平台的,并且取决于正在执行的导航类型。在 Android 上,您有 ShowActivityShowDialogFragmentShowFragment 等。您还可以在 MvvmCross Github 上看到 MvxAndroidViewPresenter 的默认实现。

    您可以看到很棒的 Greg Shackles 如何在 this blog post 中使用带有 PresentationBundle 的自定义 ViewPresenter 的一个很好的示例。他还有一个nice introduction 来查看演示者。

    【讨论】:

    • 对于其他犯同样错误的新手:
    • 如果答案解决了您的问题,请考虑通过单击灰色复选标记将其标记为解决方案 :-)
    • 嗨,马丁,我为缺乏礼节道歉。习惯了。你完全改变了我对“bundle”参数的理解。现在我知道如何使用它了。谢谢,M.
    • 完全没问题 :-) !很高兴它有帮助:-)。祝您编码愉快!
    猜你喜欢
    • 2017-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 2017-10-25
    相关资源
    最近更新 更多