Beispiel #1
0
        public IMvxViewModel ReloadViewModel <TParameter>(IMvxViewModel <TParameter> viewModel, TParameter param, MvxViewModelRequest request, IMvxBundle?savedState, IMvxNavigateEventArgs?navigationArgs = null)
            where TParameter : notnull
        {
            var viewModelLocator = FindViewModelLocator(request);

            var parameterValues = new MvxBundle(request.ParameterValues);

            try
            {
                return(viewModelLocator.Reload(viewModel, param, parameterValues, savedState, navigationArgs));
            }
            catch (Exception exception)
            {
                throw exception.MvxWrap(
                          $"Failed to construct and initialize ViewModel for type {request.ViewModelType} from locator {viewModelLocator.GetType().Name} - check InnerException for more information");
            }
        }
        // Reload should be used to re-run cached ViewModels lifecycle if required.
        public IMvxViewModel ReloadViewModel(IMvxViewModel viewModel, MvxViewModelRequest request, IMvxBundle savedState, IMvxNavigateEventArgs navigationArgs)
        {
            var viewModelLocator = FindViewModelLocator(request);

            var parameterValues = new MvxBundle(request.ParameterValues);

            try
            {
                viewModel = viewModelLocator.Reload(viewModel, parameterValues, savedState, navigationArgs);
            }
            catch (Exception exception)
            {
                throw exception.MvxWrap(
                          "Failed to reload a previously created created ViewModel for type {0} from locator {1} - check InnerException for more information",
                          request.ViewModelType, viewModelLocator.GetType().Name);
            }

            return(viewModel);
        }
Beispiel #3
0
        public IMvxViewModel LoadViewModel(MvxViewModelRequest request, IMvxBundle?savedState, IMvxNavigateEventArgs?navigationArgs = null)
        {
            if (request.ViewModelType == typeof(MvxNullViewModel))
            {
                return(new MvxNullViewModel());
            }

            var viewModelLocator = FindViewModelLocator(request);

            var parameterValues = new MvxBundle(request.ParameterValues);

            try
            {
                return(viewModelLocator.Load(request.ViewModelType !, parameterValues, savedState, navigationArgs));
            }
            catch (Exception exception)
            {
                throw exception.MvxWrap(
                          $"Failed to construct and initialize ViewModel for type {request.ViewModelType} from locator {viewModelLocator.GetType().Name} - check InnerException for more information");
            }
        }
        public static IMvxBundle SaveStateBundle(this IMvxViewModel viewModel)
        {
            var toReturn = new MvxBundle();
            var methods  = viewModel.GetType()
                           .GetMethods()
                           .Where(m => m.Name == "SaveState" && m.ReturnType != typeof(void) && !m.GetParameters().Any());

            foreach (var methodInfo in methods)
            {
                // use methods like `public T SaveState()`
                var stateObject = methodInfo.Invoke(viewModel, new object[0]);
                if (stateObject != null)
                {
                    toReturn.Write(stateObject);
                }
            }

            // call the general `public void SaveState(bundle)` method too
            viewModel.SaveState(toReturn);

            return(toReturn);
        }
        public ValueTask <IMvxViewModel> ReloadViewModel <TParameter>(IMvxViewModel <TParameter> viewModel, TParameter param, MvxViewModelRequest request, IMvxBundle?savedState, IMvxNavigateEventArgs?navigationArgs)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            var viewModelLocator = FindViewModelLocator(request);

            var parameterValues = new MvxBundle(request.ParameterValues);

            try
            {
                viewModel = viewModelLocator.Reload(viewModel, param, parameterValues, savedState, navigationArgs);
            }
            catch (Exception exception)
            {
                throw exception.MvxWrap(
                          "Failed to reload a previously created created ViewModel for type {0} from locator {1} - check InnerException for more information",
                          request.ViewModelType !, viewModelLocator.GetType().Name);
            }

            return(new ValueTask <IMvxViewModel>(viewModel));
        }
        public IMvxViewModel LoadViewModel <TParameter>(MvxViewModelRequest request, TParameter param, IMvxBundle savedState)
        {
            if (request.ViewModelType == typeof(MvxNullViewModel))
            {
                return(new MvxNullViewModel());
            }

            var viewModelLocator = FindViewModelLocator(request);

            IMvxViewModel <TParameter> viewModel = null;
            var parameterValues = new MvxBundle(request.ParameterValues);

            try
            {
                viewModel = viewModelLocator.Load(request.ViewModelType, param, parameterValues, savedState);
            }
            catch (Exception exception)
            {
                throw exception.MvxWrap(
                          "Failed to construct and initialize ViewModel for type {0} from locator {1} - check InnerException for more information",
                          request.ViewModelType, viewModelLocator.GetType().Name);
            }
            return(viewModel);
        }
Beispiel #7
0
 protected MvxPresentationHint(MvxBundle body)
 {
     Body = body;
 }