/// <summary>
        /// Updates the RecordList based on the search.
        /// </summary>
        private void UpdateRecordList()
        {
            if (EnableSearch)
            {
                var results = new List <RecordModel>();

                if (string.IsNullOrWhiteSpace(SearchText))
                {
                    results.AddRange(Records.Where(i => i.RecordDate >= FromDate).Where(i => i.RecordDate <= ToDate));
                }
                else
                {
                    var searchText = SearchText.Split(' ');

                    bool isFirstQuery = true;

                    foreach (string item in searchText)
                    {
                        if (!string.IsNullOrEmpty(item))
                        {
                            if (isFirstQuery)
                            {
                                results.AddRange(Records.Where(i => i.RecordDate >= FromDate).Where(i => i.RecordDate <= ToDate).Where(i => i.SearchString(i.TaxonId).ToLower().Contains(item.ToLower())));
                            }
                            else
                            {
                                results = results.Intersect(Records.Where(i => i.RecordDate >= FromDate).Where(i => i.RecordDate <= ToDate).Where(i => i.SearchString(i.TaxonId).ToLower().Contains(item.ToLower()))).ToList();
                            }
                            isFirstQuery = false;
                        }
                    }
                }

                SelectedRecordList.Clear();
                SelectedRecordList = new ObservableCollection <RecordModel>(results);
            }
        }
        private async Task SaveTaxa()
        {
            try
            {
                // "Neue Fundmeldung anlegen"
                if (NewRecord)
                {
                    await App.Current.MainPage.Navigation.PushAsync(new TaxonList(NewRecord));

                    throw new Exception("");
                }
                if (Connectivity.NetworkAccess != NetworkAccess.Internet)
                {
                    throw new Exception("Zur Synchronisation Internetverbindung herstellen.");
                }
                //go to login > open login
                if (Unauthorized)
                {
                    Unauthorized = false;
                    await App.Current.MainPage.Navigation.PushAsync(new RegisterDevice());

                    SyncButtonText = "Funde synchronisieren";
                    throw new Exception("");
                }
                //unauthorized > hint: go to login
                else if (Database.GetRegister() == null)
                {
                    Unauthorized   = true;
                    SyncButtonText = "Anmeldung öffnen";
                    throw new UnauthorizedAccessException("Zur Synchronisation von Fundmeldungen anmelden.");
                }

                //synchronize if no problems
                RecordEditViewModel revm = new RecordEditViewModel();
                var    count             = 0;
                string result;
                IsBusy = true;
                foreach (RecordModel taxaItem in SelectedRecordList.Where(i => i.IsEditable))
                {
                    try
                    {
                        revm.SelectedRecordId = taxaItem.LocalRecordId;
                        AdviceJsonItem[] advItem = { revm.SaveTaxa() };
                        result = await _mobileApi.SaveAdvicesByDevice(advItem);

                        ResultObj result_obj = JsonConvert.DeserializeObject <ResultObj>(result);
                        if (result_obj.succeeded == true)
                        {
                            Database.SetSynced(advItem[0].AdviceId);
                            count++;
                        }
                    }
                    catch (Exception ex)
                    {
                        Debug.WriteLine(ex.Message);
                    }
                }

                var backSynchronizedCount = await SynchronizeBack();

                count += backSynchronizedCount;
                if (count == 0)
                {
                    result = "Fundmeldungen sind aktuell";
                }
                else
                {
                    result = "Fundmeldungen synchronisiert";
                }
                IsBusy = false;

                SelectedRecordList.Clear();
                Records = await Database.GetRecordsAsync();

                SelectedRecordList = new ObservableCollection <RecordModel>(Records);
                Result             = result;
                ShowSyncButton     = false;
                OnPropertyChanged(nameof(ShowSyncButton));
            }
            catch (Exception e)
            {
                IsBusy = false;
                Result = e.Message;
            }
        }