diff --git a/SharpMap.UI.WPF/SharpMapHost.cs b/SharpMap.UI.WPF/SharpMapHost.cs index 5aef4080..ff956d29 100644 --- a/SharpMap.UI.WPF/SharpMapHost.cs +++ b/SharpMap.UI.WPF/SharpMapHost.cs @@ -403,29 +403,33 @@ private void OnMapLayerChanged(object sender, NotifyCollectionChangedEventArgs e switch (e.Action) { case NotifyCollectionChangedAction.Add: - { - var layers = sender as ObservableCollection; - if (layers != null) { - foreach (var layer in layers.Where(layer => !_mapBox.Map.Layers.Contains(layer))) + var layers = e.NewItems; + if (layers != null) { - _mapBox.Map.Layers.Add(layer); + foreach (var layer in layers) + { + var castedLayer = layer as ILayer; + if (castedLayer != null && MapBox.Map.Layers.All(l => l.LayerName != castedLayer.LayerName)) + MapBox.Map.Layers.Add(castedLayer); + } } } - } break; case NotifyCollectionChangedAction.Remove: - { - var layers = sender as ObservableCollection; - if (layers != null) { - foreach (var layer in layers.Where(layer => _mapBox.Map.Layers.Contains(layer))) + var layers = e.OldItems; + if (layers != null) { - _mapBox.Map.Layers.Remove(layer); + foreach (var layer in layers) + { + var castedLayer = layer as ILayer; + if (castedLayer != null && MapBox.Map.Layers.Any(l => l.LayerName == castedLayer.LayerName)) + MapBox.Map.Layers.Remove(castedLayer); + } } } - } break; case NotifyCollectionChangedAction.Reset: diff --git a/SharpMap.UI/Forms/MapBox.cs b/SharpMap.UI/Forms/MapBox.cs index f5f4f3c4..5dee8884 100644 --- a/SharpMap.UI/Forms/MapBox.cs +++ b/SharpMap.UI/Forms/MapBox.cs @@ -2256,10 +2256,17 @@ protected override void OnMouseUp(MouseEventArgs e) { if (_rectangle.Width > 0 && _rectangle.Height > 0) { + var zoomWindowStartPoint = _dragStartPoint; + var zoomWindowEndPoint = new PointF(e.X, e.Y); + Coordinate lowerLeft; Coordinate upperRight; - GetBounds(_map.ImageToWorld(_dragStartPoint), _map.ImageToWorld(_dragEndPoint), - out lowerLeft, out upperRight); + GetBounds( + _map.ImageToWorld(zoomWindowStartPoint), + _map.ImageToWorld(zoomWindowEndPoint), + out lowerLeft, + out upperRight); + _dragEndPoint.X = 0; _dragEndPoint.Y = 0; @@ -2551,4 +2558,4 @@ static public bool PutEnhMetafileOnClipboard(IntPtr hWnd, Metafile mf) } } #endif -} \ No newline at end of file +}