diff --git a/MapControl/Shared/MapPath.cs b/MapControl/Shared/MapPath.cs index faa409ba..0d1e7f1d 100644 --- a/MapControl/Shared/MapPath.cs +++ b/MapControl/Shared/MapPath.cs @@ -68,9 +68,16 @@ namespace MapControl protected virtual void UpdateData() { +#if !WINUI && !UWP + if (Data != null && Data.IsFrozen) + { + Data = Data.Clone(); + return; // UpdateData called again from DataPropertyChanged callback + } +#endif MapPanel.SetLocation(this, Location); - if (parentMap != null && Data != null && Location != null) + if (parentMap != null && Location != null && Data != null) { var scale = parentMap.GetScale(Location); var transform = new Matrix(scale.X, 0d, 0d, scale.Y, 0d, 0d); diff --git a/MapControl/WPF/MapPath.WPF.cs b/MapControl/WPF/MapPath.WPF.cs index 0ba67506..2dda7421 100644 --- a/MapControl/WPF/MapPath.WPF.cs +++ b/MapControl/WPF/MapPath.WPF.cs @@ -14,7 +14,15 @@ namespace MapControl { public partial class MapPath : Shape, IWeakEventListener { - public static readonly DependencyProperty DataProperty = Path.DataProperty.AddOwner(typeof(MapPath)); + public static readonly DependencyProperty DataProperty = Path.DataProperty.AddOwner( + typeof(MapPath), new PropertyMetadata(null, + (o, e) => + { + if (e.NewValue != e.OldValue) // Data is actually a new Geometry + { + ((MapPath)o).UpdateData(); + } + })); public Geometry Data {