private void Refresh(LayerContentViewModel layerContent, string propertyName)
        {
            if (propertyName == nameof(LayerContentViewModel.Sublayers))
            {
                var subLayers = layerContent?.Sublayers;
                if (subLayers == null)
                {
                    return;
                }

                if (_listView.Adapter == null)
                {
                    _listView.Adapter = new LegendAdapter(Context, new List <LayerContentViewModel>(subLayers));
                    _listView.SetHeightBasedOnChildren();
                }
                else
                {
                    (_listView.Adapter as LegendAdapter)?.NotifyDataSetChanged();
                }
            }
            else if (propertyName == nameof(LayerContentViewModel.DisplayLegend))
            {
                Visibility = (layerContent?.DisplayLegend ?? false) ? ViewStates.Visible : ViewStates.Gone;
            }
        }
Esempio n. 2
0
        private void UpdateSublayers(LayerContentViewModel layerContent)
        {
            var subLayers = layerContent?.Sublayers;

            if (subLayers == null)
            {
                _listView.Source = null;
                _listView.ReloadData();
                InvalidateIntrinsicContentSize();
                return;
            }

            var source = new LegendTableSource(new List <LayerContentViewModel>(subLayers));

            _listView.Source          = source;
            source.CollectionChanged += (a, b) => InvokeOnMainThread(() =>
            {
                _listView.ReloadData();
                _listView.SetNeedsUpdateConstraints();
                _listView.UpdateConstraints();
            });
            _listView.ReloadData();
            _listView.SetNeedsUpdateConstraints();
            _listView.UpdateConstraints();
        }
Esempio n. 3
0
        internal void Update(LayerContentViewModel layerContent)
        {
            if (layerContent == null || !layerContent.DisplayLegend)
            {
                return;
            }

            _textLabel.Font = !layerContent.IsSublayer ?
                              UIFont.BoldSystemFontOfSize(UIFont.LabelFontSize)
            : UIFont.SystemFontOfSize(UIFont.LabelFontSize);

            _textLabel.Text           = layerContent.LayerContent?.Name;
            _layerLegend.LayerContent = layerContent.LayerContent;
            UpdateSublayers(layerContent);

            if (layerContent is INotifyPropertyChanged)
            {
                var inpc     = layerContent as INotifyPropertyChanged;
                var listener = new Internal.WeakEventListener <INotifyPropertyChanged, object, PropertyChangedEventArgs>(inpc)
                {
                    OnEventAction = (instance, source, eventArgs) =>
                    {
                        Refresh(instance as LayerContentViewModel, eventArgs.PropertyName);
                    },
                    OnDetachAction = (instance, weakEventListener) => instance.PropertyChanged -= weakEventListener.OnEvent
                };
                inpc.PropertyChanged += listener.OnEvent;
            }

            InvalidateIntrinsicContentSize();
        }
Esempio n. 4
0
 private void Refresh(LayerContentViewModel layerContent, string propertyName)
 {
     if (propertyName == nameof(LayerContentViewModel.Sublayers))
     {
         UpdateSublayers(layerContent);
     }
     else if (propertyName == nameof(LayerContentViewModel.DisplayLegend))
     {
         Hidden = layerContent?.DisplayLegend ?? false;
     }
 }
        internal void Update(LayerContentViewModel layerContent)
        {
            if (layerContent == null)
            {
                return;
            }

            if (!layerContent.IsSublayer)
            {
                _textView.SetTypeface(null, TypefaceStyle.Bold);
            }
            else
            {
                _textView.SetPadding(10, 0, 0, 0);
                _layerLegend.SetPadding(10, 0, 0, 0);
                _listView.SetPadding(10, 0, 0, 0);
            }

            _textView.Text            = layerContent.LayerContent?.Name;
            _layerLegend.LayerContent = layerContent.LayerContent;
            if (layerContent.Sublayers != null)
            {
                _listView.Adapter = new LegendAdapter(Context, new List <LayerContentViewModel>(layerContent.Sublayers));
                _listView.SetHeightBasedOnChildren();
            }

            if (layerContent is INotifyPropertyChanged)
            {
                var inpc     = layerContent as INotifyPropertyChanged;
                var listener = new Internal.WeakEventListener <INotifyPropertyChanged, object, PropertyChangedEventArgs>(inpc)
                {
                    OnEventAction = (instance, source, eventArgs) =>
                    {
                        Refresh(instance as LayerContentViewModel, eventArgs.PropertyName);
                    },
                    OnDetachAction = (instance, weakEventListener) => instance.PropertyChanged -= weakEventListener.OnEvent
                };
                inpc.PropertyChanged += listener.OnEvent;
            }
        }