public void OnAppearing()
 {
     if (SelectionHost?.IsAvailable == true)
     {
         DrinkIngredients.Add(SelectionHost.Selection);
     }
 }
        protected bool IsDrinkValid(out StringBuilder msgBuilder)
        {
            msgBuilder = new StringBuilder();
            if (string.IsNullOrWhiteSpace(DrinkName) || DrinkName.Length < 5 || DrinkName.Length > 250)
            {
                msgBuilder.Append("'Drink name' has to have at least 5 and a maximum of 250 characters! \n");
            }
            if (DrinkIngredients.Any(d => d.Milliliter < 15 || d.Milliliter > 500))
            {
                msgBuilder.Append("'Milliliter' has to be between 15 and 500");
            }

            return(msgBuilder.Length == 0);
        }
コード例 #3
0
        public EditDrinkRecipePageViewModel(
            IUserInteraction userInteraction,
            IDrinkRecipeBuilder drinkRecipeBuilder,
            INavigationService navigationService,
            IDrinkRecipesRepository drinkRecipesRepository,
            ICrossMediaService crossMediaService,
            ISelectionHost <DrinkIngredientViewModel> selectionHost,
            DrinkRecipeViewModel drinkRecipeViewModel)
            : base(userInteraction, navigationService, drinkRecipeBuilder, crossMediaService, selectionHost)
        {
            _userInteraction        = userInteraction;
            _drinkRecipeBuilder     = drinkRecipeBuilder;
            _drinkRecipesRepository = drinkRecipesRepository;
            _drinkIngredient        = drinkRecipeViewModel;

            DrinkName = drinkRecipeViewModel.Name;
            ByteImage = drinkRecipeViewModel.ByteImage;
            DrinkIngredients.AddRange(drinkRecipeViewModel.IngredientViewModels);
        }
        protected ConfigureDrinkRecipePageViewModelBase(
            IUserInteraction userInteraction,
            INavigationService navigationService,
            IDrinkRecipeBuilder drinkRecipeBuilder,
            ICrossMediaService crossMediaService,
            ISelectionHost <DrinkIngredientViewModel> selectionHost)
        {
            _userInteraction   = userInteraction;
            _navigationService = navigationService;
            SelectionHost      = selectionHost;

            var addIngredientCanExecute = this.WhenAnyValue(vm => vm.DrinkIngredients.Count,
                                                            i => i < 6);

            addIngredientCanExecute
            .Where(canExecute => !canExecute)
            .SubscribeAsync(async() => await _userInteraction.DisplayAlertAsync("Info",
                                                                                "Cannot have more then 6 ingredients", "Ok"));

            var alreadySelectedParameter = new TypedParameter(typeof(IEnumerable <DrinkIngredientViewModel>), DrinkIngredients);

            AddIngredientCommand = ReactiveCommand.CreateFromTask(async _ =>
                                                                  await _navigationService.PushAsync <SelectIngredientsPageViewModel>(alreadySelectedParameter),
                                                                  addIngredientCanExecute);

            AbortCommand = ReactiveCommand.CreateFromTask(async _ => await _navigationService.PopAsync());

            var completedCommandCanExecute = DrinkIngredients.CountChanged
                                             .Select(count => count != 0);

            completedCommandCanExecute
            .Where(hasIngredients => !hasIngredients)
            .Skip(1)
            .Select(async _ =>
                    await _userInteraction.DisplayAlertAsync("Warning", "Add ingredients or abort the process!", "ok"))
            .Subscribe(_ => {}, ex => throw ex);

            CompleteCommand = ReactiveCommand.CreateFromTask(async _ =>
            {
                if (!IsDrinkValid(out StringBuilder msgBuilder))
                {
                    await userInteraction.DisplayAlertAsync("Error", msgBuilder.ToString(), "Ok");
                    return;
                }

                var ingredients = DrinkIngredients
                                  .Select(ivm => ivm.UpdateDrinkIngredientModel())
                                  .ToList();

                await CompletedTemplateMethod(drinkRecipeBuilder, ingredients);
                await navigationService.PopAsync();
            }, completedCommandCanExecute);
            CompleteCommand.ThrownExceptions.Subscribe(exception => throw exception);

            ByteImageTapRecognizerCommand = ReactiveCommand.CreateFromTask(async _ =>
            {
                var photo = await crossMediaService.GetPhotoAsync();
                if (photo != null)
                {
                    ByteImage = photo;
                }
            });
        }