void SetPins(AgendaPageModel context) { if (context == null || context.CourseItems == null) { return; } Map.Pins.Clear(); Map.Polylines.Clear(); // Draw Point markers foreach (var item in context.CourseItems) { var pin = new Pin() { Address = item.Address, IsDraggable = false, Flat = true, Label = item.ContactName, IsVisible = true, Icon = BitmapDescriptorFactory.FromView(new BindingPinView(item.Index, Color.Transparent)), Position = new Position(item.Latitude, item.Longitude) }; Map.Pins.Add(pin); } // Draw Lines connecting points for (int i = 0; i < context.CourseItems.Count; i++) { if (i + 1 < context.CourseItems.Count) { var item = context.CourseItems[i]; var next_item = context.CourseItems[i + 1]; var line = new Polyline() { IsClickable = false, StrokeColor = (Color)App.Current.Resources["darkSkyBlue"], StrokeWidth = 2 }; line.Positions.Add(new Position(item.Latitude, item.Longitude)); line.Positions.Add(new Position(next_item.Latitude, next_item.Longitude)); Map.Polylines.Add(line); } } if (!Map.Pins.Contains(MyPin) && !string.IsNullOrEmpty(MyPin.Label)) { Map.Pins.Add(MyPin); } }
// Assign on set pins event whenever list is changed protected override void OnBindingContextChanged() { base.OnBindingContextChanged(); if (BindingContext == null) { return; } ViewModel = BindingContext as AgendaPageModel; ViewModel.PropertyChanged += (sender, e) => { if (e.PropertyName == "CourseItems") { SetPins(ViewModel); } }; SetPins(ViewModel); }