Guys,
Looks like the GeoCollection.Remove(string) API does not work. I modified your sample AddSimpleMarkers class to be able to remove a marker as follows:
usingSystem;usingSystem.Linq;usingSystem.Windows;usingSystem.Windows.Controls;usingSystem.Windows.Media.Imaging;usingThinkGeo.MapSuite.Core;usingThinkGeo.MapSuite.WpfDesktopEdition;
namespaceCSHowDoISamples{publicpartialclassAddSimpleMarkers : UserControl{publicAddSimpleMarkers(){InitializeComponent();}
privatevoidWpfMap_Loaded(objectsender, RoutedEventArgs e){wpfMap1.MapUnit = GeographyUnit.DecimalDegree;wpfMap1.CurrentExtent =newRectangleShape(-155.733, 95.60, 104.42, -81.9);
WorldMapKitWmsWpfOverlay worldMapKitOverlay =newWorldMapKitWmsWpfOverlay();wpfMap1.Overlays.Add(worldMapKitOverlay);
SimpleMarkerOverlay markerOverlay =newSimpleMarkerOverlay();wpfMap1.Overlays.Add("MarkerOverlay", markerOverlay);
wpfMap1.Refresh();}
privatevoidwpfMap1_MapClick(objectsender, MapClickWpfMapEventArgs e){if(e.MouseButton != MapMouseButton.Left)return;
SimpleMarkerOverlay markerOverlay = (SimpleMarkerOverlay)wpfMap1.Overlays["MarkerOverlay"];Marker marker =newMarker(e.WorldLocation);marker.ImageSource =newBitmapImage(newUri("/Resources/AQUA.png", UriKind.RelativeOrAbsolute));marker.Width = 20;marker.Height = 34;marker.YOffset = -17;
var contextMenu =newContextMenu();var menuItem =newMenuItem();menuItem.Header ="Remove";menuItem.Name ="Marker"+ marker.GetHashCode().ToString();menuItem.Click += OnRemoveMarkerRequested;contextMenu.Items.Add(menuItem);marker.ContextMenu = contextMenu;
marker.Name = menuItem.Name;markerOverlay.Markers.Add(marker);markerOverlay.Refresh();}
privatevoidOnRemoveMarkerRequested(objectsender, RoutedEventArgs e){var markerOverlay = (SimpleMarkerOverlay)wpfMap1.Overlays["MarkerOverlay"];var markerName = ((MenuItem) e.Source).Name;// does not work?markerOverlay.Markers.Remove(markerName);var marker = markerOverlay.Markers.First(m =>string.Compare(m.Name, markerName, StringComparison.OrdinalIgnoreCase) == 0);markerOverlay.Markers.Remove(marker);
// remember to unhook MenuItem from OnRemoveMarkerRequestedmarkerOverlay.Refresh();}}}
If you run the sample, an exception is not thrown by the LINQ statement indicating that the marker was not removed. However, grabbing the marker instance and remove it works correctly. Any ideas or a better recommendation on how to remove markers?
TIA.
W