using System; using System.ComponentModel; using System.Diagnostics; using Prism.Navigation; using Shiny.Locations; using ShinyPrismSample.Delegates; namespace ShinyPrismSample.ViewModels { public class MainPageViewModel : INavigatedAware, INotifyPropertyChanged, IDestructible { IGpsListener _gpsListener; IGpsManager _gpsManager; public event PropertyChangedEventHandler PropertyChanged; public string LocationMessage { get; set; } public MainPageViewModel(IGpsManager gpsManager,IGpsListener gpsListener) { _gpsManager = gpsManager; _gpsListener = gpsListener; _gpsListener.OnReadingReceived += OnReadingReceived; } void OnReadingReceived(object sender, GpsReadingEventArgs e) { LocationMessage = $"{e.Reading.Position.Latitude}, {e.Reading.Position.Longitude}"; Debug.WriteLine(LocationMessage); } public void OnNavigatedFrom(INavigationParameters parameters) { } public async void OnNavigatedTo(INavigationParameters parameters) { if (_gpsManager.IsListening) { await _gpsManager.StopListener(); } await _gpsManager.StartListener(new GpsRequest { UseBackground = true, Priority = GpsPriority.Highest, Interval = TimeSpan.FromSeconds(5), ThrottledInterval = TimeSpan.FromSeconds(3) //Should be lower than Interval }); } public void Destroy() { _gpsListener.OnReadingReceived -= OnReadingReceived; } } }