public void NavigateBack <TResult>(ILifecycleViewModelWithResult <TResult> fromViewModel, ResultCode resultCode, TResult result)
            where TResult : Result
        {
            NavigationViewProvider.TryGetView(fromViewModel, out INavigationView <ILifecycleViewModelWithResult <TResult> > fromView);

            NavigateBack(fromView, resultCode, result, true);
        }
Пример #2
0
        public void NavigateBack <TResult>(ILifecycleViewModelWithResult <TResult> fromViewModel, ResultCode resultCode, TResult result)
            where TResult : Result
        {
            var fromView = NavigationViewProvider.Get(fromViewModel);

            NavigateBack(fromView, resultCode, result, true);
        }
        /// <summary>
        /// Gets an existing <see cref="INavigationView{TViewModel}"/> instance by <paramref name="viewModel"/> that can return a lifecycle-aware view model result.
        /// </summary>
        /// <typeparam name="TResult">The type of the view model result.</typeparam>
        /// <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 <TResult>(ILifecycleViewModelWithResult <TResult> viewModel, [MaybeNullWhen(returnValue: false)] out INavigationView <ILifecycleViewModelWithResult <TResult> > view)
            where TResult : Result
        {
            if (viewModel == null)
            {
                throw new ArgumentNullException(nameof(viewModel));
            }

            return(ViewRegistry.TryGetView(viewModel, out view));
        }
Пример #4
0
        /// <summary>
        /// Returns an existing <see cref="INavigationView{TViewModel}"/> instance by <paramref name="viewModel"/> that can return a lifecycle-aware view model result.
        /// </summary>
        /// <typeparam name="TResult">The type of the view model result.</typeparam>
        /// <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 <ILifecycleViewModelWithResult <TResult> > Get <TResult>(ILifecycleViewModelWithResult <TResult> viewModel)
            where TResult : Result
        {
            if (viewModel == null)
            {
                throw new ArgumentNullException(nameof(viewModel));
            }

            return(ViewCache.Get <INavigationView <ILifecycleViewModelWithResult <TResult> >, ILifecycleViewModelWithResult <TResult> >(viewModel));
        }
        /// <summary>
        /// Returns an existing <see cref="INavigationView{TViewModel}"/> instance by <paramref name="viewModel"/> that can return a lifecycle-aware view model result.
        /// </summary>
        /// <typeparam name="TResult">The type of the view model result.</typeparam>
        /// <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 <ILifecycleViewModelWithResult <TResult> > Get <TResult>(ILifecycleViewModelWithResult <TResult> viewModel)
            where TResult : Result
        {
            if (viewModel == null)
            {
                throw new ArgumentNullException(nameof(viewModel));
            }

            if (!ViewRegistry.TryGetView <ILifecycleViewModelWithResult <TResult>, INavigationView <ILifecycleViewModelWithResult <TResult> > >(viewModel, out var view))
            {
                throw new InvalidOperationException(
                          $"The view instance is missing for the provided '{TypeFormatter.FormatName(viewModel.GetType())}' view model.");
            }

            return(view);
        }