Skip to content

Commit 66a0abd

Browse files
Introduced logic to clear selected features when exiting Feature mode to prevent persistence. (#704)
Added event handlers for GeometryEditor.PropertyChanged to manage geometry editing state changes. Implemented OnExternalGeometryEditorPropertyChanged to cancel feature measurement if an external geometry editing session starts, ensuring no conflict with feature identify measurement.
1 parent 14bf095 commit 66a0abd

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

src/Toolkit/Toolkit.UI.Controls/MeasureToolbar/MeasureToolbar.cs

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,15 @@ private MeasureToolbarMode Mode
5959
{
6060
if (_mode != value)
6161
{
62+
// When leaving Feature mode, clear any previously selected feature so it does not persist.
63+
if (_mode is MeasureToolbarMode.Feature && value is not MeasureToolbarMode.Feature)
64+
{
65+
_measureFeatureResultOverlay.Graphics.Clear();
66+
if (_clearButton is not null)
67+
{
68+
_clearButton.IsEnabled = false;
69+
}
70+
}
6271
_mode = value;
6372
PrepareMeasureMode();
6473
}
@@ -617,9 +626,50 @@ private static void OnMapViewPropertyChanged(DependencyObject d, DependencyPrope
617626
{
618627
oldMapView.GeoViewTapped -= toolbar.OnMapViewTapped;
619628
toolbar.RemoveMeasureFeatureResultOverlay(oldMapView);
629+
if (oldMapView.GeometryEditor is not null)
630+
{
631+
oldMapView.GeometryEditor.PropertyChanged -= toolbar.OnExternalGeometryEditorPropertyChanged;
632+
}
620633
}
621634

622635
newMapView.GeoViewTapped += toolbar.OnMapViewTapped;
636+
if (newMapView.GeometryEditor is not null)
637+
{
638+
newMapView.GeometryEditor.PropertyChanged += toolbar.OnExternalGeometryEditorPropertyChanged;
639+
}
640+
}
641+
642+
/// <summary>
643+
/// Watches the MapView.GeometryEditor for sessions started externally (not by this toolbar).
644+
/// If a geometry editing session starts while in feature measurement mode, feature measurement is cancelled.
645+
/// </summary>
646+
/// <remarks>
647+
/// We only care when we are in Feature mode and the toolbar has not itself hooked the editor
648+
/// (length/area measuring). In that case a foreign geometry editing workflow would conflict with
649+
/// feature identify measurement, so we exit Feature mode and clear any selection.
650+
/// </remarks>
651+
private void OnExternalGeometryEditorPropertyChanged(object? sender, PropertyChangedEventArgs e)
652+
{
653+
if (e.PropertyName is not nameof(GeometryEditor.IsStarted))
654+
{
655+
return;
656+
}
657+
if (sender is not GeometryEditor ge)
658+
{
659+
return;
660+
}
661+
// Ignore if this toolbar owns the session (length/area modes)
662+
if (_isGeometryEditorHooked)
663+
{
664+
return;
665+
}
666+
// If an external session starts while measuring a feature, end feature measurement.
667+
if (ge.IsStarted && Mode is MeasureToolbarMode.Feature)
668+
{
669+
_measureFeatureResultOverlay.Graphics.Clear();
670+
Mode = MeasureToolbarMode.None;
671+
DisplayResult();
672+
}
623673
}
624674

625675
/// <summary>

0 commit comments

Comments
 (0)