示例#1
0
        /// <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));
        }
示例#3
0
        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);
        }
示例#5
0
        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);
             *
             */
        }