private void DisposeMapView() { VenuesMapView.RemoveAnnotations(VenuesMapView.Annotations); var mapDelegate = VenuesMapView.WeakDelegate as MapDelegate; if (mapDelegate != null) { mapDelegate.SelectAnnotationCommand = null; mapDelegate.ShowDetailsCommand = null; mapDelegate.Dispose(); VenuesMapView.WeakDelegate = null; } }
private void InitializeMapView() { if (ViewModel.OrgEvent != null && ViewModel.OrgEvent.Venues != null) { if (!_isMapViewInitialized) { VenuesMapView.RemoveAnnotations(VenuesMapView.Annotations); if (!(VenuesMapView.WeakDelegate is MapDelegate)) { var mapDelegate = new MapDelegate { SelectAnnotationCommand = ViewModel.SelectVenueOnMapCommand, ShowDetailsCommand = ViewModel.NavigateVenueCommand }; VenuesMapView.Delegate = mapDelegate; } var annotations = ViewModel.OrgEvent.Venues .SelectMany(v => v.Info.Addresses .Select(a => new VenueAnnotation(v, a))).ToArray(); var coordinates = MapUtil.GetAnnotationsCoordinates(annotations); VenuesMapView.SetRegion(MapUtil.CoordinateRegionForCoordinates(coordinates, MapMargin), false); VenuesMapView.AddAnnotations(annotations); if (ViewModel.SelectedVenueOnMap != null) { SelectVenueMapAnnotation(ViewModel.SelectedVenueOnMap); } _isMapViewInitialized = true; } } else { VenuesMapView.RemoveAnnotations(VenuesMapView.Annotations); _isMapViewInitialized = false; } }