private void Refresh()
        {
            if (_listView == null)
            {
                return;
            }

            if ((GeoView as MapView)?.Map == null && (GeoView as SceneView)?.Scene == null)
            {
                _listView.Adapter = null;
                return;
            }

            ObservableLayerContentList layers = null;

            if (GeoView is MapView)
            {
                layers = new ObservableLayerContentList(GeoView as MapView, ShowLegendInternal)
                {
                    ReverseOrder = !ReverseLayerOrder,
                };
            }
            else if (GeoView is SceneView)
            {
                layers = new ObservableLayerContentList(GeoView as SceneView, ShowLegendInternal)
                {
                    ReverseOrder = !ReverseLayerOrder,
                };
            }

            if (layers == null)
            {
                _listView.Adapter = null;
                return;
            }

            foreach (var l in layers)
            {
                if (!(l.LayerContent is Layer))
                {
                    continue;
                }

                var layer = l.LayerContent as Layer;
                if (layer.LoadStatus == LoadStatus.Loaded)
                {
                    l.UpdateLayerViewState(GeoView.GetLayerViewState(layer));
                }
            }

            ScaleChanged();
            SetLayerContentList(layers);
            _listView.Adapter = new LegendAdapter(Context, layers);
            _listView.SetHeightBasedOnChildren();
        }
        /// <summary>
        /// Generates layer list for a set of <see cref="Layer"/>s in a <see cref="Map"/> or <see cref="Scene"/>
        /// contained in a <see cref="GeoView"/>
        /// </summary>
        internal void Refresh()
        {
            var list = GetTemplateChild("List") as ItemsControl;

            if (list == null)
            {
                return;
            }
#if !NETFX_CORE
            ContextMenuService.AddContextMenuOpeningHandler(list, ContextMenuEventHandler);
#endif

            if ((GeoView as MapView)?.Map == null && (GeoView as SceneView)?.Scene == null)
            {
                list.ItemsSource = null;
                return;
            }

            ObservableLayerContentList layers = null;
            if (GeoView is MapView)
            {
                layers = new ObservableLayerContentList(GeoView as MapView, ShowLegendInternal)
                {
                    ReverseOrder = !ReverseLayerOrder,
                };

                Binding b = new Binding();
                b.Source = GeoView;
                b.Path   = new PropertyPath(nameof(MapView.Map));
                b.Mode   = BindingMode.OneWay;
                SetBinding(DocumentProperty, b);
            }
            else if (GeoView is SceneView)
            {
                layers = new ObservableLayerContentList(GeoView as SceneView, ShowLegendInternal)
                {
                    ReverseOrder = !ReverseLayerOrder,
                };

                Binding b = new Binding();
                b.Source = GeoView;
                b.Path   = new PropertyPath(nameof(SceneView.Scene));
                b.Mode   = BindingMode.OneWay;
                SetBinding(DocumentProperty, b);
            }

            if (layers == null)
            {
                list.ItemsSource = null;
                return;
            }

            foreach (var l in layers)
            {
                if (!(l.LayerContent is Layer))
                {
                    continue;
                }

                var layer = l.LayerContent as Layer;
                if (layer.LoadStatus == LoadStatus.Loaded)
                {
                    l.UpdateLayerViewState(GeoView.GetLayerViewState(layer));
                }
            }

            ScaleChanged();
            SetLayerContentList(layers);
            list.ItemsSource = layers;
        }
Example #3
0
        private void RebuildList()
        {
            var list = GetTemplateChild("List") as ItemsControl;

            if (list != null)
            {
                if (GeoView != null)
                {
                    ObservableLayerContentList layers = null;
                    if (GeoView is MapView)
                    {
                        var map = (GeoView as MapView).Map;
                        if (map != null)
                        {
                            layers = new ObservableLayerContentList(GeoView as MapView, ShowLegend)
                            {
                                ReverseOrder = true
                            };
                        }
                        System.Windows.Data.Binding b = new System.Windows.Data.Binding();
                        b.Source = GeoView;
                        b.Path   = new PropertyPath(nameof(MapView.Map));
                        b.Mode   = System.Windows.Data.BindingMode.OneWay;
                        SetBinding(DocumentProperty, b);
                    }
                    else if (GeoView is SceneView)
                    {
                        var scene = (GeoView as SceneView).Scene;
                        if (scene != null)
                        {
                            layers = new ObservableLayerContentList(GeoView as SceneView, ShowLegend)
                            {
                                ReverseOrder = true
                            }
                        }
                        ;
                        System.Windows.Data.Binding b = new System.Windows.Data.Binding();
                        b.Source = GeoView;
                        b.Path   = new PropertyPath(nameof(SceneView.Scene));
                        b.Mode   = System.Windows.Data.BindingMode.OneWay;
                        SetBinding(DocumentProperty, b);
                    }
                    if (layers != null && GeoView != null)
                    {
                        foreach (var l in layers)
                        {
                            var layer = l.LayerContent as Layer;
                            if (layer.LoadStatus == LoadStatus.Loaded)
                            {
                                l.UpdateLayerViewState(GeoView.GetLayerViewState(layer));
                            }
                        }
                        _scaleChanged = true;
                        UpdateScaleVisiblity();
                    }
                    list.ItemsSource = layerContentList = layers;
                }
                else
                {
                    list.ItemsSource = null;
                }
            }
        }
Example #4
0
        private void Refresh()
        {
            if (_listView == null)
            {
                return;
            }

            if ((GeoView as MapView)?.Map == null && (GeoView as SceneView)?.Scene == null)
            {
                _listView.Source = null;
                _listView.ReloadData();
                InvalidateIntrinsicContentSize();
                return;
            }

            ObservableLayerContentList layers = null;

            if (GeoView is MapView)
            {
                layers = new ObservableLayerContentList(GeoView as MapView, ShowLegendInternal)
                {
                    ReverseOrder = !ReverseLayerOrder,
                };
            }
            else if (GeoView is SceneView)
            {
                layers = new ObservableLayerContentList(GeoView as SceneView, ShowLegendInternal)
                {
                    ReverseOrder = !ReverseLayerOrder,
                };
            }

            if (layers == null)
            {
                _listView.Source = null;
                return;
            }

            foreach (var l in layers)
            {
                if (!(l.LayerContent is Layer))
                {
                    continue;
                }

                var layer = l.LayerContent as Layer;
                if (layer.LoadStatus == LoadStatus.Loaded)
                {
                    l.UpdateLayerViewState(GeoView.GetLayerViewState(layer));
                }
            }

            ScaleChanged();
            SetLayerContentList(layers);
            var source = new LegendTableSource(layers);

            _listView.Source          = source;
            source.CollectionChanged += (a, b) => InvokeOnMainThread(() =>
            {
                _listView.ReloadData();
                InvalidateIntrinsicContentSize();
            });
            _listView.ReloadData();
            InvalidateIntrinsicContentSize();
            Hidden = false;
        }