MapViewModel.cs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. using System.Collections.Generic;
  2. using System.Collections.ObjectModel;
  3. using System.Windows;
  4. using System.Windows.Media;
  5. using InABox.WPF;
  6. using net.sf.mpxj;
  7. using Syncfusion.UI.Xaml.Maps;
  8. namespace PRSDesktop;
  9. public enum MapViewType
  10. {
  11. Current,
  12. History
  13. }
  14. public class MapViewModel : DependencyObject
  15. {
  16. private readonly List<MapMarker> _markers = new();
  17. private readonly List<MapMarker> _waypoints = new();
  18. private MapMarker? _selected;
  19. public MapViewModel()
  20. {
  21. Markers = new ObservableCollection<MapMarker>();
  22. WayPoints = new ObservableCollection<Point>();
  23. }
  24. public ObservableCollection<MapMarker> Markers { get; }
  25. public ObservableCollection<Point> WayPoints { get; }
  26. static readonly DependencyProperty ViewProperty =
  27. DependencyProperty.Register(
  28. nameof(View),
  29. typeof(MapViewType),
  30. typeof(MapViewModel));
  31. public MapViewType View
  32. {
  33. get => (MapViewType)GetValue(ViewProperty);
  34. set
  35. {
  36. SetValue(ViewProperty, value);
  37. Refresh();
  38. }
  39. }
  40. public MapMarker Selected
  41. {
  42. get => _selected;
  43. set
  44. {
  45. _selected = value;
  46. Refresh();
  47. }
  48. }
  49. public void AddWayPoint(MapMarker waypoint)
  50. {
  51. _waypoints.Add(waypoint);
  52. }
  53. public void AddMarker(MapMarker marker, bool refresh = false)
  54. {
  55. _markers.Add(marker);
  56. if (refresh)
  57. Refresh();
  58. }
  59. public void Clear()
  60. {
  61. _selected = null;
  62. _markers.Clear();
  63. _waypoints.Clear();
  64. Refresh();
  65. }
  66. public void Refresh()
  67. {
  68. Markers.Clear();
  69. WayPoints.Clear();
  70. if (View == MapViewType.Current)
  71. {
  72. foreach (var marker in _markers)
  73. {
  74. marker.Background = new SolidColorBrush(marker == _selected ? Colors.Yellow : Colors.Orange);
  75. if (marker != _selected)
  76. Markers.Add(marker);
  77. }
  78. if (_selected != null)
  79. Markers.Add(_selected);
  80. }
  81. else if (_selected != null)
  82. {
  83. foreach (var waypoint in _waypoints)
  84. {
  85. Markers.Add(waypoint);
  86. WayPoints.Add(new Point(double.Parse(waypoint.Longitude), double.Parse(waypoint.Latitude)));
  87. }
  88. }
  89. }
  90. }