private static void ShapeFileMenuitem_Click(object sender, RoutedEventArgs e)
        {
            var overlay = GisEditor.SelectionManager.GetSelectionOverlay();
            Dictionary <FeatureLayer, GeoCollection <Feature> > group = overlay.GetSelectedFeaturesGroup();

            if (group.Count > 1)
            {
                ChooseExportLayerWindow chooseExportLayerWindow = new ChooseExportLayerWindow(overlay.TargetFeatureLayers, overlay.TargetFeatureLayers);
                if (chooseExportLayerWindow.ShowDialog().GetValueOrDefault())
                {
                    FeatureLayer sourceLayer = chooseExportLayerWindow.SelectedSourceFeatureLayer;
                    sourceLayer.Open();
                    var allColumns = sourceLayer.FeatureSource.GetColumns();
                    Collection <Feature> features = GisEditor.SelectionManager.GetSelectedFeatures(sourceLayer);
                    FeatureLayerPlugin   plugin   = (FeatureLayerPlugin)GisEditor.LayerManager.GetLayerPlugins(sourceLayer.GetType()).FirstOrDefault();
                    ExportToShapeFile(features, allColumns, plugin, sourceLayer.FeatureSource.GetFirstFeaturesWellKnownType());
                }
            }
            else if (group.Count == 1)
            {
                FeatureLayer layer = group.First().Key;
                layer.Open();
                Collection <Feature> features = group.First().Value;
                var allColumns            = layer.FeatureSource.GetColumns();
                FeatureLayerPlugin plugin = (FeatureLayerPlugin)GisEditor.LayerManager.GetLayerPlugins(layer.GetType()).FirstOrDefault();
                ExportToShapeFile(features, allColumns, plugin, layer.FeatureSource.GetFirstFeaturesWellKnownType());
            }
        }
        public static void CopyToEditLayer(Collection <FeatureLayer> selectionLayers)
        {
            GisEditorEditInteractiveOverlay overlay = GisEditor.ActiveMap.FeatureLayerEditOverlay;

            if (overlay != null)
            {
                FeatureLayer editingLayer = overlay.EditTargetLayer;
                Collection <FeatureLayer> sourceLayers = new Collection <FeatureLayer>(selectionLayers.Except(editingLayer).ToList());
                if (sourceLayers.Count > 1)
                {
                    ChooseExportLayerWindow chooseExportLayerWindow = new ChooseExportLayerWindow(sourceLayers, new Collection <FeatureLayer> {
                        editingLayer
                    });
                    chooseExportLayerWindow.SelectedTargetFeatureLayer = editingLayer;
                    if (chooseExportLayerWindow.ShowDialog().GetValueOrDefault())
                    {
                        AddSelectedFeaturesToEditingLayer(chooseExportLayerWindow.SelectedSourceFeatureLayer);
                    }
                    else
                    {
                        return;
                    }
                }
                else if (selectionLayers.Count == 1)
                {
                    AddSelectedFeaturesToEditingLayer(selectionLayers[0]);
                }
                else if (selectionLayers.Count == 2 && sourceLayers.Count == 1)
                {
                    AddSelectedFeaturesToEditingLayer(sourceLayers[0]);
                }
            }
        }
        private static void AddFeaturesToSelectedLayer(Collection <FeatureLayer> selectedFeaturesLayers, Collection <FeatureLayer> existLayers)
        {
            ChooseExportLayerWindow chooseExportLayerWindow = new ChooseExportLayerWindow(selectedFeaturesLayers, existLayers);

            if (chooseExportLayerWindow.ShowDialog().GetValueOrDefault())
            {
                FeatureLayer         sourceLayer = chooseExportLayerWindow.SelectedSourceFeatureLayer;
                Collection <Feature> features    = GisEditor.SelectionManager.GetSelectedFeatures(sourceLayer);
                InMemoryFeatureLayer targetLayer = chooseExportLayerWindow.SelectedTargetFeatureLayer as InMemoryFeatureLayer;

                //foreach (var item in sourceLayer.FeatureSource.LinkSources)
                //{
                //    targetLayer.FeatureSource.LinkSources.Add(item);
                //}
                //foreach (var item in sourceLayer.FeatureSource.LinkExpressions)
                //{
                //    targetLayer.FeatureSource.LinkExpressions.Add(item);
                //}

                AddFeaturesToInMemoryFeatureLayer(targetLayer, features);
                if (GisEditor.ActiveMap.GetFeatureLayers().OfType <InMemoryFeatureLayer>().All(l => !l.Name.Equals(targetLayer.Name)))
                {
                    if (targetLayer.Name.Equals("New layer"))
                    {
                        string name = "ExportResults";
                        IEnumerable <string> existingNames = GisEditor.ActiveMap.Overlays.OfType <LayerOverlay>()
                                                             .SelectMany(o => o.Layers).OfType <InMemoryFeatureLayer>().Select(l => l.Name);
                        int index = 0;
                        while (existingNames.Contains(name))
                        {
                            index++;
                            name = "ExportResults" + index;
                        }
                        targetLayer.Name = name;
                    }
                    GisEditor.ActiveMap.AddLayerToActiveOverlay(targetLayer, TargetLayerOverlayType.Dynamic);
                }
            }
        }