| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 | using System.Collections.Generic;using System.Collections.ObjectModel;using System.Windows;using System.Windows.Media;using InABox.WPF;using net.sf.mpxj;using Syncfusion.UI.Xaml.Maps;namespace PRSDesktop;public enum MapViewType{    Current,    History}public class MapViewModel : DependencyObject{        private readonly List<MapMarker> _markers = new();    private readonly List<MapMarker> _waypoints = new();    private MapMarker? _selected;    public MapViewModel()    {        Markers = new ObservableCollection<MapMarker>();        WayPoints = new ObservableCollection<Point>();    }    public ObservableCollection<MapMarker> Markers { get; }    public ObservableCollection<Point> WayPoints { get; }        static readonly DependencyProperty ViewProperty =        DependencyProperty.Register(            nameof(View),            typeof(MapViewType),            typeof(MapViewModel));    public MapViewType View    {        get => (MapViewType)GetValue(ViewProperty);        set        {            SetValue(ViewProperty, value);            Refresh();        }    }    public MapMarker Selected    {        get => _selected;        set        {            _selected = value;            Refresh();        }    }    public void AddWayPoint(MapMarker waypoint)    {        _waypoints.Add(waypoint);    }    public void AddMarker(MapMarker marker, bool refresh = false)    {        _markers.Add(marker);        if (refresh)            Refresh();    }    public void Clear()    {        _selected = null;        _markers.Clear();        _waypoints.Clear();        Refresh();    }    public void Refresh()    {        Markers.Clear();        WayPoints.Clear();        if (View == MapViewType.Current)        {            foreach (var marker in _markers)            {                marker.Background = new SolidColorBrush(marker == _selected ? Colors.Yellow : Colors.Orange);                if (marker != _selected)                    Markers.Add(marker);            }            if (_selected != null)                Markers.Add(_selected);        }        else if (_selected != null)        {            foreach (var waypoint in _waypoints)            {                Markers.Add(waypoint);                WayPoints.Add(new Point(double.Parse(waypoint.Longitude), double.Parse(waypoint.Latitude)));            }        }    }}
 |