/// <summary>
        /// Event handler for layer selection change.
        /// </summary>
        /// <param name="mapViewArgs">An instance of the MapViewEventArgs.</param>
        private async void SelectedLayersChanged(ArcGIS.Desktop.Mapping.Events.MapViewEventArgs mapViewArgs)
        {
            // Check if there is an active map view.
            if (MapView.Active != null)
            {
                // Gets the selected layers from the current Map.
                IReadOnlyList <Layer> selectedLayers = MapView.Active.GetSelectedLayers();

                // The combo box will update only if one layer is selected.
                if (selectedLayers.Count == 1)
                {
                    // Gets the selected layer.
                    Layer firstSelectedLayer = selectedLayers.First();

                    // Make sure the selected layer is an image service layer.
                    if (firstSelectedLayer != null && firstSelectedLayer is ImageServiceLayer)
                    {
                        // Initiates the combox box selected item.
                        //InitializeComboBox();

                        await QueuedTask.Run(() =>
                        {
                            // Get and store the rendering rule of the selected image service layer.
                            renderingRule_default = (firstSelectedLayer as ImageServiceLayer).GetRenderingRule();
                        });
                    }
                }
            }
            else
            {
                MessageBox.Show("There is no active map.", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
        /// <summary>
        /// This function is used to apply a raster function template onto an image service layer.
        /// </summary>
        /// <param name="selectedLayer">The selected image service layer. </param>
        /// <param name="operation">An Enum type represents the user selected operation. </param>
        /// <param name="xmlFilePath">The XML file path.</param>
        /// <returns></returns>
        public static async Task ApplyRFTXmlFile(ImageServiceLayer selectedLayer, Enum operation, string xmlFilePath)
        {
            // Creates a new instance of XmlDocument class.
            XmlDocument xmlDoc = new XmlDocument();

            // Loads the RFT XML file from its file path.
            xmlDoc.Load(xmlFilePath);

            // Creates a new instance of the rendering rule.
            CIMRenderingRule setRenderingrule = new CIMRenderingRule();

            // Gets the markup containing all the nodes and their child nodes, passes to the rendering rule definition.
            setRenderingrule.Definition = xmlDoc.OuterXml;

            // Defines the rendering rule name as the operation name.
            setRenderingrule.Name = Convert.ToString(operation);

            await QueuedTask.Run(() =>
            {
                // Sets the new rendering rule to the selected layer.
                selectedLayer.SetRenderingRule(setRenderingrule);

                // Gets the current rendering rule from the layer.
                CIMRenderingRule renderingRule = selectedLayer.GetRenderingRule();

                //Verifies if the current rendering rule name is correct. Else, error message shows up.
                if (renderingRule.Name != Convert.ToString(operation))
                {
                    ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("The operation is not succeeded, please check...",
                                                                     "Operation unsucceeded:", MessageBoxButton.OK, MessageBoxImage.Error);
                }
            });
        }
        /// <summary>
        /// Set the processing template on the first selected image service layer in the first open 2D map.
        /// </summary>
        /// <param name="templateName">The name of the processing template to set on the layer.</param>
        /// <returns></returns>
        public static async Task SetProcessingTemplateAsync(string templateName)
        {
            try
            {
                // Get the first 2D map from the project that is called Map.
                Map _map = await GetMapFromProject(Project.Current, "Map");

                if (_map == null)
                {
                    ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("SetResamplingType: Failed to get map.");
                    return;
                }

                // Get the most recently selected layer.
                Layer firstSelectedLayer = MapView.Active.GetSelectedLayers().First();
                // Check if the first selected layer is an image service layer.
                if (firstSelectedLayer is ImageServiceLayer)
                {
                    // Set the colorizer on the most recently selected layer.
                    // The colorizer has to be set on the Main CIM Thread (MCT).
                    ImageServiceLayer isLayer = (ImageServiceLayer)firstSelectedLayer;
                    await QueuedTask.Run(() =>
                    {
                        // Create a new Rendering rule
                        CIMRenderingRule setRenderingrule = new CIMRenderingRule()
                        {
                            // Set the name of the rendering rule.
                            Name = templateName
                        };
                        // Update the image service with the new mosaic rule.
                        isLayer.SetRenderingRule(setRenderingrule);
                    });
                }
            }
            catch (Exception exc)
            {
                // Catch any exception found and display a message box.
                ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("Exception caught while trying to set processing template: " + exc.Message);
                return;
            }
        }
        // Event Handler, gets name of selected RFT and changes the rendering rule of the Image Service to be displayed accordingly
        private async void RFT_SelectChanged(object sender)
        {
            try
            {
                //Map _map1 = await GetMapFromProject(Project.Current, "Map");
                Map _map = MapView.Active.Map;
                if (_map == null)
                {
                    ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("AddRasterLayerToMap: Failed to get map.");
                    return;
                }

                string            dataSoureUrl      = ServiceURL;
                ImageServiceLayer imageServiceLayer = null;
                await QueuedTask.Run(() =>
                {
                    imageServiceLayer = (ImageServiceLayer)LayerFactory.Instance.CreateLayer(new Uri(dataSoureUrl), _map);
                    if (imageServiceLayer == null)
                    {
                        ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("Failed to create layer for url:" + dataSoureUrl);
                        return;
                    }
                    ImageServiceLayer isLayer = imageServiceLayer;
                    // Create a new Rendering rule
                    CIMRenderingRule setRenderingrule = new CIMRenderingRule();
                    // Set the name of the rendering rule.
                    setRenderingrule.Name = sender.ToString();
                    // Update the image service with the new mosaic rule.
                    isLayer.SetRenderingRule(setRenderingrule);
                    string originalLayerName = isLayer.Name;
                    isLayer.SetName(originalLayerName + "_" + sender.ToString());
                });
            }
            catch (Exception ex)
            {
                System.Diagnostics.Trace.WriteLine(ex.Message);
            }
        }