IMvxNavigationService
is an abstraction for the native navigation. Actually, it uses ViewModel
to navigate, not from View to View. That means that we do not need to use platform-specific navigation, and MvvmCross
will find the correct View to show.
IMvxNavigationService
supports a lot of different async
methods to implement navigation. You can find all the interfaces here: https://github.com/MvvmCross/MvvmCross/blob/develop/MvvmCross/Navigation/IMvxNavigationService.cs. Get started from a simple one:
Task Navigate<TViewModel>(IMvxBundle presentationBundle = null) where TViewModel : IMvxViewModel;
By this method, we can navigate to a new ViewModel
without specifying the View we want to navigate to. MvvmCross
will find the right view which is associated with this ViewModel
.
If we need to pass a param to the new ViewModel
, there is another method to do this:
Task Navigate<TViewModel, TParameter>(TParameter param, IMvxBundle presentationBundle = null) where TViewModel : IMvxViewModel<TParameter>;
Before you use this method, make sure the target ViewModel
has a generic param, like PostDetailViewModel
:
public class PostDetailViewModel : MvxViewModel<Post>{…}
For some situation, we need to get the result of the target ViewModel
and return it to the source ViewModel
. For example, if we edit a Post, we should update the post in the PostListView
after returning.