private void item_PolygonChanged(object sender, NotifyCollectionChangedEventArgs e)
{
GraphicsLayer graphicsLayer = sender as GraphicsLayer;
if (graphicsLayer != null)
{
if (_layerMapOverlay.ContainsKey(graphicsLayer.ID))
{
GMapOverlay overlay = _layerMapOverlay[graphicsLayer.ID].GMapOverlay;
if (e.Action == NotifyCollectionChangedAction.Add && e.NewItems != null)
{
if (!_polygonMapGMapPolygon.ContainsKey(graphicsLayer.ID))
{
_polygonMapGMapPolygon.Add(graphicsLayer.ID, new Dictionary<string, PolygonMapGMapPolygon>());
}
foreach (Polygon polygonItem in e.NewItems)
{
if (polygonItem != null)
{
if (_polygonMapGMapPolygon[graphicsLayer.ID].ContainsKey(polygonItem.ID))
{
graphicsLayer.Polygons.Remove(polygonItem);
}
GMapPolygon gMapPolygon = new GMapPolygon(Helper.Point2Ds2PointLatLngs(polygonItem.Point2Ds), polygonItem.ID);
gMapPolygon.IsVisible = true;
gMapPolygon.IsHitTestVisible = true;
gMapPolygon.Fill = new SolidBrush(polygonItem.FillColor);
gMapPolygon.Stroke = new Pen(polygonItem.StrokeColor, (float)polygonItem.StrokeWeight);
overlay.Polygons.Add(gMapPolygon);
_polygonMapGMapPolygon[graphicsLayer.ID].Add(polygonItem.ID, new PolygonMapGMapPolygon(polygonItem, gMapPolygon));
}
}
}
else if (e.Action == NotifyCollectionChangedAction.Remove && e.OldItems != null)
{
foreach (Polygon polygonItem in e.OldItems)
{
if (polygonItem != null)
{
overlay.Polygons.Remove(_polygonMapGMapPolygon[graphicsLayer.ID][polygonItem.ID].GMapPolygon);
if (_polygonMapGMapPolygon[graphicsLayer.ID].ContainsKey(polygonItem.ID))
{
_polygonMapGMapPolygon[graphicsLayer.ID].Remove(polygonItem.ID);
}
}
}
}
else if (e.Action == NotifyCollectionChangedAction.Reset)
{
overlay.Polygons.Clear();
if (_polygonMapGMapPolygon.ContainsKey(graphicsLayer.ID))
{
_polygonMapGMapPolygon[graphicsLayer.ID].Clear();
}
}
}
}
}