private async void LoadRecursive(IList <LegendInfo> itemsList, ILayerContent content, bool recursive)
        {
            if (content == null)
            {
                return;
            }

            try
            {
#pragma warning disable ESRI1800 // Add ConfigureAwait(false) - This is UI Dependent code and must return to UI Thread
                var legendInfo = await content.GetLegendInfosAsync();

#pragma warning restore ESRI1800
                foreach (var item in legendInfo)
                {
                    itemsList.Add(item);
                }
            }
            catch
            {
                return;
            }

            if (recursive)
            {
                foreach (var item in content.SublayerContents)
                {
                    LoadRecursive(itemsList, item, recursive);
                }
            }
        }
Пример #2
0
        private async Task <TreeViewItem> TraverseLayer(ILayerContent layer, TreeViewItem root)
        {
            try
            {
                Logging.LogMethodCall(MethodBase.GetCurrentMethod().DeclaringType.Name, () => new Dictionary <String, Object> {
                    { nameof(layer), layer },
                    { nameof(root), root }
                });
                root.CanDisable     = layer.CanChangeVisibility;
                root.IsChecked      = layer.IsVisible;
                root.MirrorToParent = false;
                root.Layer          = layer;
                IReadOnlyList <LegendInfo> lgnd = await layer.GetLegendInfosAsync();

                if (lgnd.Count() == 1)
                {
                    root.SetSymbol(lgnd[0].Symbol);
                }
                else
                {
                    List <String> labelsAdded = new List <String>();
                    foreach (var smbl in lgnd)
                    {
                        if (!labelsAdded.Contains(smbl.Name))
                        {
                            var item = new TreeViewItem(smbl.Name, smbl.Symbol);
                            item.CanDisable = false;
                            root.Children.Add(item);
                            labelsAdded.Add(smbl.Name);
                        }
                    }
                }
                foreach (var subLyr in layer.SublayerContents)
                {
                    var          info  = lgnd.FirstOrDefault(inf => inf.Name == subLyr.Name);
                    TreeViewItem child = null;
                    if (info == null)
                    {
                        child = await TraverseLayer(subLyr, new TreeViewItem(subLyr.Name));
                    }
                    else
                    {
                        child = await TraverseLayer(subLyr, new TreeViewItem(subLyr.Name, info.Symbol));
                    }
                    root.Children.Add(child);
                }
                return(root);
            }
            catch (Exception ex)
            {
                var message = "Error traversing layer";
                ErrorHelper.OnError(MethodBase.GetCurrentMethod().DeclaringType.Name, message, ex);
                Logging.LogMessage(Logging.LogType.Error, message, ex);
                return(root);
            }
        }
Пример #3
0
        private TreeViewItem TraverseLayer(ILayerContent layer, TreeViewItem root)
        {
            root.CanDisable     = layer.CanChangeVisibility;
            root.IsChecked      = layer.IsVisible;
            root.MirrorToParent = false;
            Console.WriteLine(layer.SublayerContents.Count);
            root.Layer = layer;
            var lgnd = layer.GetLegendInfosAsync().Result;

            if (lgnd.Count == 1)
            {
                root.SetSymbol(lgnd[0].Symbol);
            }
            else
            {
                foreach (var smbl in lgnd)
                {
                    var item = new TreeViewItem(smbl.Name, smbl.Symbol);
                    item.CanDisable = false;
                    root.Children.Add(item);
                }
            }
            foreach (var subLyr in layer.SublayerContents)
            {
                var          info  = lgnd.FirstOrDefault(inf => inf.Name == subLyr.Name);
                TreeViewItem child = null;
                if (info == null)
                {
                    child = TraverseLayer(subLyr, new TreeViewItem(subLyr.Name));
                }
                else
                {
                    child = TraverseLayer(subLyr, new TreeViewItem(subLyr.Name, info.Symbol));
                }
                root.Children.Add(child);
            }
            return(root);
        }