string[] myLayerIDs = { "FeatureLayer1", "FeatureLayer2", "FeatureLayer3", "FeatureLayer4" }; List<strList> myDataSource = new List<strList>(); foreach (var layerID in myLayerIDs) { FeatureLayer isLayer = Map.Layers[layerID] as FeatureLayer; isLayer.UpdateCompleted += (sender, e) => { foreach (Graphic layerItem in isLayer.Graphics) { myDataSource.Add(new strList { LayerName = layerItem, ImageSource = layerItem.Symbol }); break; } }; }
Solved! Go to Solution.
public class ListLayerDisponible { public bool IsCheckedCheck { get; set; } public string LayerName { get; set; } public string TypeLayer { get; set; } public StackPanel ContentSymbol { get; set; } } private static IEnumerable<FeatureLayer> GetLayers(IEnumerable<string> ids, Map map) { if (map != null) { if (ids != null) { foreach (string item in ids) { FeatureLayer featureLayer = GetFeatureLayerWithID(item, map); if (featureLayer != null) yield return featureLayer; } } else { foreach (Layer layer in map.Layers) { if (layer is FeatureLayer && !string.IsNullOrEmpty(layer.ID)) { yield return layer as FeatureLayer; } } } } } private static FeatureLayer GetFeatureLayerWithID(string layerID, Map map) { if (map != null && !string.IsNullOrEmpty(layerID) && map.Layers[layerID] is FeatureLayer) return map.Layers[layerID] as FeatureLayer; return null; } public class GroupSymbology { public string Name { get; set; } public IList<Symbology> Templates { get; set; } public override string ToString() { return Name; } } public class Symbology { public string Name { get; set; } public object TypeID { get; set; } public Symbol Symbol { get; set; } public string Description { get; set; } public override string ToString() { return Name; } } private static Symbology GetSymbolTemplate(Symbol symbol, object featureTypeID, string templateName, string displayName, string description) { object type = null; if (featureTypeID != null && !string.IsNullOrEmpty(templateName)) type = new object[] { featureTypeID, templateName }; else if (featureTypeID != null) type = featureTypeID; else type = templateName; Symbology symbolTemplate = new Symbology() { TypeID = type, Symbol = symbol, Name = displayName, Description = description }; return symbolTemplate; } public List<GroupSymbology> templateGroups = new List<GroupSymbology>(); public void UpdateDataSourceSymbology_UpdateCompleted(object sender, EventArgs e) { FeatureLayer layer = (FeatureLayer)sender; GroupSymbology group = new GroupSymbology() { Name = layer.ID, Templates = new List<Symbology>() }; if (layer.Renderer != null) { Symbol defaultSymbol = layer.Renderer.GetSymbol(null); if (layer.LayerInfo.FeatureTypes != null && layer.LayerInfo.FeatureTypes.Count > 0) { foreach (KeyValuePair<object, FeatureType> type in layer.LayerInfo.FeatureTypes) { if (type.Value != null && type.Value.Templates != null && type.Value.Templates.Count > 0) { foreach (KeyValuePair<string, FeatureTemplate> featureTemplate in type.Value.Templates) { string name; if (type.Value.Templates.Count > 1) name = string.Format("{0}-{1}", type.Value.Name, featureTemplate.Value.Name); else name = type.Value.Name; Symbol symbol = featureTemplate.Value.GetSymbol(layer.Renderer) ?? defaultSymbol; Symbology symbolTemplate = GetSymbolTemplate(symbol, type.Value.Id, featureTemplate.Value.Name, name, featureTemplate.Value.Description); if (symbol != null) group.Templates.Add(symbolTemplate); } } } } else if (layer.LayerInfo.Templates != null && layer.LayerInfo.Templates.Count > 0) { foreach (KeyValuePair<string, FeatureTemplate> featureTemplate in layer.LayerInfo.Templates) { Symbology symbolTemplate = GetSymbolTemplate(defaultSymbol, null, featureTemplate.Value.Name, featureTemplate.Value.Name, featureTemplate.Value.Description); if (defaultSymbol != null) group.Templates.Add(symbolTemplate); } } else { if (defaultSymbol != null) group.Templates.Add(GetSymbolTemplate(defaultSymbol, null, null, layer.ID, null)); } if (group.Templates.Count > 0) templateGroups.Add(group); } StackPanel contenerGroupSymbol = new StackPanel() { Orientation = Orientation.Horizontal }; foreach (var objSymbol in group.Templates) { SymbolDisplay _SymbolDisplay = new SymbolDisplay() { Name = objSymbol.Name, Width = 14, Height = 14, Symbol = objSymbol.Symbol, Margin = new Thickness(0, 0, 5, 0) }; contenerGroupSymbol.Children.Add(_SymbolDisplay); } workflowData.Add(new ListLayerDisponible { IsCheckedCheck = false, LayerName = group.Name, TypeLayer = "null", ContentSymbol = contenerGroupSymbol }); MyListBox.ItemsSource = workflowData; layer.UpdateCompleted -= UpdateDataSourceSymbology_UpdateCompleted; } private readonly ObservableCollection<ListLayerDisponible> workflowData = new ObservableCollection<ListLayerDisponible>(); private void AddListLayerDisponible() { string[] myLayerIDs = { "FeatureLayer_1", "FeatureLayer_2", "FeatureLayer_3", "FeatureLayer_4" }; foreach (FeatureLayer isLayer in GetLayers(myLayerIDs, Map)) { FeatureLayer layer = Map.Layers[isLayer.ID] as FeatureLayer; layer.UpdateCompleted += UpdateDataSourceSymbology_UpdateCompleted; } }
public class ListLayerDisponible { public bool IsCheckedCheck { get; set; } public string LayerName { get; set; } public string TypeLayer { get; set; } public StackPanel ContentSymbol { get; set; } } private static IEnumerable<FeatureLayer> GetLayers(IEnumerable<string> ids, Map map) { if (map != null) { if (ids != null) { foreach (string item in ids) { FeatureLayer featureLayer = GetFeatureLayerWithID(item, map); if (featureLayer != null) yield return featureLayer; } } else { foreach (Layer layer in map.Layers) { if (layer is FeatureLayer && !string.IsNullOrEmpty(layer.ID)) { yield return layer as FeatureLayer; } } } } } private static FeatureLayer GetFeatureLayerWithID(string layerID, Map map) { if (map != null && !string.IsNullOrEmpty(layerID) && map.Layers[layerID] is FeatureLayer) return map.Layers[layerID] as FeatureLayer; return null; } public class GroupSymbology { public string Name { get; set; } public IList<Symbology> Templates { get; set; } public override string ToString() { return Name; } } public class Symbology { public string Name { get; set; } public object TypeID { get; set; } public Symbol Symbol { get; set; } public string Description { get; set; } public override string ToString() { return Name; } } private static Symbology GetSymbolTemplate(Symbol symbol, object featureTypeID, string templateName, string displayName, string description) { object type = null; if (featureTypeID != null && !string.IsNullOrEmpty(templateName)) type = new object[] { featureTypeID, templateName }; else if (featureTypeID != null) type = featureTypeID; else type = templateName; Symbology symbolTemplate = new Symbology() { TypeID = type, Symbol = symbol, Name = displayName, Description = description }; return symbolTemplate; } public List<GroupSymbology> templateGroups = new List<GroupSymbology>(); public void UpdateDataSourceSymbology_UpdateCompleted(object sender, EventArgs e) { FeatureLayer layer = (FeatureLayer)sender; GroupSymbology group = new GroupSymbology() { Name = layer.ID, Templates = new List<Symbology>() }; if (layer.Renderer != null) { Symbol defaultSymbol = layer.Renderer.GetSymbol(null); if (layer.LayerInfo.FeatureTypes != null && layer.LayerInfo.FeatureTypes.Count > 0) { foreach (KeyValuePair<object, FeatureType> type in layer.LayerInfo.FeatureTypes) { if (type.Value != null && type.Value.Templates != null && type.Value.Templates.Count > 0) { foreach (KeyValuePair<string, FeatureTemplate> featureTemplate in type.Value.Templates) { string name; if (type.Value.Templates.Count > 1) name = string.Format("{0}-{1}", type.Value.Name, featureTemplate.Value.Name); else name = type.Value.Name; Symbol symbol = featureTemplate.Value.GetSymbol(layer.Renderer) ?? defaultSymbol; Symbology symbolTemplate = GetSymbolTemplate(symbol, type.Value.Id, featureTemplate.Value.Name, name, featureTemplate.Value.Description); if (symbol != null) group.Templates.Add(symbolTemplate); } } } } else if (layer.LayerInfo.Templates != null && layer.LayerInfo.Templates.Count > 0) { foreach (KeyValuePair<string, FeatureTemplate> featureTemplate in layer.LayerInfo.Templates) { Symbology symbolTemplate = GetSymbolTemplate(defaultSymbol, null, featureTemplate.Value.Name, featureTemplate.Value.Name, featureTemplate.Value.Description); if (defaultSymbol != null) group.Templates.Add(symbolTemplate); } } else { if (defaultSymbol != null) group.Templates.Add(GetSymbolTemplate(defaultSymbol, null, null, layer.ID, null)); } if (group.Templates.Count > 0) templateGroups.Add(group); } StackPanel contenerGroupSymbol = new StackPanel() { Orientation = Orientation.Horizontal }; foreach (var objSymbol in group.Templates) { SymbolDisplay _SymbolDisplay = new SymbolDisplay() { Name = objSymbol.Name, Width = 14, Height = 14, Symbol = objSymbol.Symbol, Margin = new Thickness(0, 0, 5, 0) }; contenerGroupSymbol.Children.Add(_SymbolDisplay); } workflowData.Add(new ListLayerDisponible { IsCheckedCheck = false, LayerName = group.Name, TypeLayer = "null", ContentSymbol = contenerGroupSymbol }); MyListBox.ItemsSource = workflowData; layer.UpdateCompleted -= UpdateDataSourceSymbology_UpdateCompleted; } private readonly ObservableCollection<ListLayerDisponible> workflowData = new ObservableCollection<ListLayerDisponible>(); private void AddListLayerDisponible() { string[] myLayerIDs = { "FeatureLayer_1", "FeatureLayer_2", "FeatureLayer_3", "FeatureLayer_4" }; foreach (FeatureLayer isLayer in GetLayers(myLayerIDs, Map)) { FeatureLayer layer = Map.Layers[isLayer.ID] as FeatureLayer; layer.UpdateCompleted += UpdateDataSourceSymbology_UpdateCompleted; } }