/// <summary> /// Returns an existing <see cref="INavigationView{TViewModel}"/> instance by <paramref name="viewModel"/> that can handle a lifecycle-aware view model result. /// </summary> /// <param name="viewModel">The view model that is used to get its view.</param> /// <returns>The navigation view instance.</returns> /// <exception cref="ArgumentNullException"><paramref name="viewModel"/> is <see langword="null"/>.</exception> /// <exception cref="InvalidOperationException">The view instance is missing for the provided <paramref name="viewModel"/>.</exception> public static INavigationView <ILifecycleViewModelWithResultHandler> Get(ILifecycleViewModelWithResultHandler viewModel) { if (viewModel == null) { throw new ArgumentNullException(nameof(viewModel)); } return(ViewCache.Get <INavigationView <ILifecycleViewModelWithResultHandler>, ILifecycleViewModelWithResultHandler>(viewModel)); }
/// <summary> /// Gets an existing <see cref="INavigationView{TViewModel}"/> instance by <paramref name="viewModel"/> that can handle a lifecycle-aware view model result. /// </summary> /// <param name="viewModel">The view model that is used to get its view.</param> /// <param name="view">The navigation view corresponding to the provided model.</param> /// <returns><see langword="true"/> if the view still exists and has not yet been garbage collected or disposed; otherwise, <see langword="false"/>.</returns> /// <exception cref="ArgumentNullException"><paramref name="viewModel"/> is <see langword="null"/>.</exception> public static bool TryGetView(ILifecycleViewModelWithResultHandler viewModel, [MaybeNullWhen(returnValue: false)] out INavigationView <ILifecycleViewModelWithResultHandler> view) { if (viewModel == null) { throw new ArgumentNullException(nameof(viewModel)); } return(ViewRegistry.TryGetView(viewModel, out view)); }
public void NavigateToLanguages(ILifecycleViewModelWithResultHandler from) { var view = NavigationViewProvider.Get(from); var target = new LanguagesViewController(); NavigateForResult <LanguagesViewController, SelectedLanguageResult>(view, target, true); /* Here's what is done by Navigate() above: * * target.ResultSetWeakSubscribe(view.HandleResult); * view.GetNavigationController().PushViewController(target, true); * */ }
public static INavigationView <ILifecycleViewModelWithResultHandler> Get(ILifecycleViewModelWithResultHandler viewModel) { if (viewModel == null) { throw new ArgumentNullException(nameof(viewModel)); } if (!ViewRegistry.TryGetView <ILifecycleViewModelWithResultHandler, INavigationView <ILifecycleViewModelWithResultHandler> >(viewModel, out var view)) { throw new InvalidOperationException( $"The view instance is missing for the provided '{TypeFormatter.FormatName(viewModel.GetType())}' view model."); } return(view); }
public void NavigateToLanguages(ILifecycleViewModelWithResultHandler from) { var view = NavigationViewProvider.Get(from); NavigateForResult <LanguagesActivity, SelectedLanguageResult>(view); /* Here's what is approximately done by Navigate() above: * * var source = view.GetActivity(); * var code = view.RequestCode.GetFor<DefaultResultMapper<SelectedLanguageResult>>(); * var intent = new Intent(source, typeof(LanguagesActivity)); * source.StartActivityForResult(intent, code); * */ }