private async void TourButton_Click(object sender, RoutedEventArgs e)
        {
            // Get the selected track info
            TrackInfo ti = ArtistListBox.SelectedItem as TrackInfo;

            // Filter the tour layer by artist ID
            string artistFilter = "artistid = '" + ti.ArtistId + "'";

            _tourLayer.DefinitionExpression = artistFilter;
            _tourLayer.IsVisible            = true;

            // Zoom to the extent of the tour
            QueryParameters query = new QueryParameters
            {
                WhereClause = artistFilter
            };
            FeatureQueryResult tourQueryResult = await _tourLayer.FeatureTable.QueryFeaturesAsync(query);

            // Zoom to the first result (assumed to be the next event?)
            Feature nextEvent = tourQueryResult.FirstOrDefault();

            if (nextEvent == null)
            {
                return;
            }

            // Zoom to the event
            await ArtistMapView.SetViewpointCenterAsync(nextEvent.Geometry as MapPoint);
        }
        private async void MyMapView_GeoViewTapped(object sender, Esri.ArcGISRuntime.Xamarin.Forms.GeoViewInputEventArgs e)
        {
            this.MyMapView.GraphicsOverlays[0].Graphics.Clear();

            QueryParameters queryParameters = new QueryParameters();

            queryParameters.Geometry = e.Location;
            string sum = string.Empty;
            List <CalloutDefinition> calloutDefinitions = new List <CalloutDefinition>();
            //List<Feature> features = new List<Feature>();
            StringBuilder stringBuilder = new StringBuilder();

            this.ViewModel.Fields.Clear();
            foreach (var table in this.ViewModel.ServiceFeatureTables)
            {
                FeatureTable arcGISFeatureTable = table as FeatureTable;
                FeatureLayer layer = table.Layer as FeatureLayer;
                layer.ClearSelection();
                if (this.ViewModel.EsriMap.OperationalLayers.Contains(layer))
                {
                    string[]           outputFields = { "*" };
                    FeatureQueryResult fqr          = await table.QueryFeaturesAsync(queryParameters, QueryFeatureFields.LoadAll);

                    Feature feature = fqr.FirstOrDefault();
                    if (feature != null)
                    {
                        stringBuilder.Append(feature.Attributes.First().Value + Environment.NewLine);
                        //features.Add(feature);
                        layer.SelectFeature(feature);
                        StringBuilder       sb      = new StringBuilder();
                        FeatureTableWrapper wrapper = new FeatureTableWrapper();
                        wrapper.TableName = layer.FeatureTable.TableName;
                        wrapper.KeyValues = new Dictionary <string, string>();
                        foreach (var att in feature.Attributes)
                        {
                            if (!wrapper.KeyValues.ContainsKey(att.Key))
                            {
                                wrapper.KeyValues.Add(att.Key, att.Value.ToString());
                            }
                        }
                        this.ViewModel.Fields.Add(wrapper);
                    }
                }
            }
            this.MyMapView.GraphicsOverlays[0].Graphics.Add(new Esri.ArcGISRuntime.UI.Graphic(e.Location));
            CalloutDefinition callout = new CalloutDefinition(this.ViewModel.GeoviProject.Name, stringBuilder.ToString());
            Point             point   = new Point(e.Location.X, e.Location.Y);

            this.MyMapView.ShowCalloutAt(e.Location, callout);
        }