public SearchSavedMessage(SaveSearchResults results, ServiceModel serviceModel)
 {
     Results      = results;
     ServiceModel = serviceModel;
 }
        private async Task UpdateFeatureLayers(SaveSearchResults results, ServiceModel serviceModel)
        {
            Debug.Assert(MapView.Active != null);
            var mapView = MapView.Active;

            var progressDlg = new ProgressDialog("Updating map...");

            try
            {
                progressDlg.Show();

                await QueuedTask.Run(() =>
                {
                    var serviceUri = results.FeatureService;
                    foreach (var resultLayer in results.FeatureLayers)
                    {
                        // check if the feature layer already exists (e.g. save search -> replace)
                        var featureLayer = FindLayerByDataset <FeatureLayer>(mapView.Map, serviceUri.AbsoluteUri, resultLayer.Id.ToString());
                        if (featureLayer == null)
                        {
                            // add the entire feature service as a group layer
                            using (var geoDb = new Geodatabase(new ServiceConnectionProperties(serviceUri)))
                            {
                                GroupLayer groupLayer = null;

                                // add the new group layer
                                groupLayer = (GroupLayer)LayerFactory.Instance.CreateLayer(serviceUri, mapView.Map);
                                groupLayer.SetName(serviceModel.Name);
                                foreach (var childLayer in groupLayer.GetLayersAsFlattenedList())
                                {
                                    var match = MatchLayer(childLayer, serviceUri.AbsoluteUri, resultLayer.Id.ToString());
                                    if (match && childLayer.Name != resultLayer.Name)
                                    {
                                        childLayer.SetName(resultLayer.Name);
                                    }
                                    childLayer.SetVisibility(match);
                                }
                            }
                        }
                        else
                        {
                            // force a refresh
                            featureLayer.ClearDisplayCache();
                            featureLayer.SetDefinitionQuery(featureLayer.DefinitionQuery);

                            // ensure the feature layer is visible
                            if (!featureLayer.IsVisible)
                            {
                                featureLayer.SetVisibility(true);
                            }

                            // update layer name
                            if (featureLayer.Name != resultLayer.Name)
                            {
                                featureLayer.SetName(resultLayer.Name);
                            }
                        }
                    }
                });
            }
            catch (Exception e)
            {
                e.HandleAsUserNotification();
            }
            finally
            {
                progressDlg.Hide();
            }
        }