protected BaseLocationEditorViewModel(
            ISchedulerProvider schedulerProvider,
            IPlacesProvider placesProvider,
            IGeocodingProvider geocodingProvider,
            INavigationService navigationService)
        {
            _navigationService = navigationService;

            this.Changed(() => SearchText)
            .Where(text => !string.IsNullOrEmpty(text))
            .Throttle(TimeSpan.FromMilliseconds(300), schedulerProvider.DefaultScheduler)
            .ObserveOn(schedulerProvider.SynchronizationContextScheduler)
            .Subscribe(async searchText =>
            {
                IsSearching   = true;
                SearchResults = await placesProvider.GetAutoCompleteResponse(searchText);
                IsSearching   = false;
            });

            this.Changed(() => SearchText)
            .Where(string.IsNullOrEmpty)
            .Subscribe(_ => SearchResults = GetEmptyAutocompleteResult());

            var selectedEmptyAutocompleteResultModelObservable = this.Changed(() => SelectedSearchResult)
                                                                 .Where(result => result is EmptyAutocompleteResultModel)
                                                                 .Cast <EmptyAutocompleteResultModel>();

            selectedEmptyAutocompleteResultModelObservable.Where(r => r.Address == null)
            .ObserveOn(schedulerProvider.SynchronizationContextScheduler)
            .Subscribe(selectedResult =>
            {
                switch (selectedResult)
                {
                case HomeResultModel _:
                    _navigationService.NavigateToSearchView <HomeLocationEditorViewModel>(callBack: null);
                    break;

                case WorkResultModel _:
                    _navigationService.NavigateToSearchView <WorkLocationEditorViewModel>(callBack: null);
                    break;
                }
            });

            var selectedEmptyAddress = selectedEmptyAutocompleteResultModelObservable
                                       .Where(r => r.Address != null)
                                       .Select(r => r.Address);

            SelectedAddress = SelectedAutoCompleteResultModelObservable
                              .Select(x => Observable.FromAsync(() => geocodingProvider.ReverseGeocodingFromPlaceId(x.PlaceId)))
                              .Concat()
                              .Merge(selectedEmptyAddress);
        }
        protected BaseLocationEditorViewModel(
            ISchedulerProvider schedulerProvider,
            IPlacesProvider placesProvider,
            IGeocodingProvider geocodingProvider,
            INavigationService navigationService)
        {
            _geocodingProvider = geocodingProvider;
            _navigationService = navigationService;

            this.Changed(() => SearchText)
            .Where(text => !string.IsNullOrEmpty(text))
            .Throttle(TimeSpan.FromMilliseconds(300), schedulerProvider.DefaultScheduler)
            .ObserveOn(schedulerProvider.SynchronizationContextScheduler)
            .Subscribe(async searchText =>
            {
                IsSearching   = true;
                SearchResults = await placesProvider.GetAutoCompleteResponse(searchText);
                IsSearching   = false;
            });

            this.Changed(() => SearchText)
            .Where(string.IsNullOrEmpty)
            .Subscribe(_ => SearchResults = GetEmptyAutocompleteResult());

            this.Changed(() => SelectedSearchResult)
            .Where(result => result is EmptyAutocompleteResultModel)
            .Cast <EmptyAutocompleteResultModel>()
            .ObserveOn(schedulerProvider.SynchronizationContextScheduler)
            .Subscribe(selectedResult =>
            {
                if (selectedResult.Address == null)
                {
                    NavigateToLocationEditorViewModel(selectedResult);
                }
                else
                {
                    SelectedAddress = selectedResult.Address;
                    _navigationService.GoBack();
                }
            });

            SelectedAutoCompleteResultModelObservable.Subscribe(async result =>
            {
                await SetAutoCompleteResultModel(result.PlaceId);
            });
        }