示例#1
0
 public LocationsTabbedViewModel()
 {
     GoToRadius = ReactiveCommand.CreateFromObservable(() =>
     {
         var vm = new ChooseRadiusViewModel();
         vm.OnVehiclesLoaded += _OnVehiclesLoaded;
         return(NavigateTo(vm));
     });
 }
示例#2
0
        public ChooseLocationViewModel(IAppDatabase db = null)
        {
            this.db = db ?? Locator.Current.GetService <IAppDatabase>();

            GoToRadius = ReactiveCommand.CreateFromObservable(() =>
            {
                var vm = new ChooseRadiusViewModel(ChosenLocation);
                vm.OnVehiclesLoaded += OnVehiclesLoaded;
                return(NavigateTo(vm));
            });

            AddToFavourites = ReactiveCommand.CreateFromObservable(() =>
            {
                return(Observable.FromAsync(async() => await UserDialogs.Instance.PromptAsync(new PromptConfig
                {
                    Placeholder = "Location name",
                    InputType = InputType.Name,
                    OkText = "Ok",
                    Title = "Save location",
                }))
                       .Do(promptResult =>
                {
                    if (string.IsNullOrWhiteSpace(promptResult.Text))
                    {
                        UserDialogs.Instance.Toast("Invalid name.");
                    }
                    else if (!promptResult.Ok || ChosenLocation == null)
                    {
                        UserDialogs.Instance.Toast("Error occurred - try again.");
                    }
                })
                       .Where(promptResult =>
                {
                    return promptResult.Ok && !string.IsNullOrWhiteSpace(promptResult.Text) && ChosenLocation != null;
                })
                       .SubscribeOn(RxApp.MainThreadScheduler)
                       .ObserveOn(RxApp.TaskpoolScheduler)
                       .SelectMany(promptResult =>
                {
                    ChosenLocation.Name = promptResult.Text;
                    return Observable.FromAsync(() => this.db.InsertLocation(ChosenLocation));
                })
                       .ObserveOn(RxApp.MainThreadScheduler)
                       .Do(wasAdded =>
                {
                    if (wasAdded)
                    {
                        UserDialogs.Instance.Toast($"{ChosenLocation.Name} added to favourites.");
                    }
                    else
                    {
                        UserDialogs.Instance.Toast($"{ChosenLocation.Name} already added to favourites.");
                    }
                }));
            });
        }