我是Android编程的新手。 我选择了MvvmCross 5.x作为我的框架。 我想我了解如何从ViewModel
发送"复杂"对象和字典(捆绑包):
Task Navigate<TParameter>(IMvxViewModel<TParameter> viewModel,
TParameter param,
IMvxBundle presentationBundle = null);
如何接收正在导航到的ViewModel
中的捆绑包?
也就是说,字典/捆绑包调用什么方法?
用于导航的presentationBundle
参数是ViewModelRequest
对象的一部分,该对象将传递给MvxViewPresenter
的Show
方法。您可以在平台上创建视图演示器的自定义实现,并使用PresentationBundle
自定义导航过渡的外观或修改导航堆栈。
请参阅 GitHub 上的ViewModelRequest
源代码。属性PresentationValues
将包含您在导航中传递的捆绑包。以下是 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
属性。这些特定于每个平台,取决于正在执行的导航类型。在安卓上,你有ShowActivity
、ShowDialogFragment
、ShowFragment
等。你也可以在MvvmCross Github上看到MvxAndroidViewPresenter
的默认实现。
您可以在这篇博客文章中看到一个很好的例子,说明令人敬畏的 Greg Shackles 如何使用带有PresentationBundle
的自定义ViewPresenter
。他还对视图演示者进行了很好的介绍。