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; } }
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(); }
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(); }
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; } }