Mvvm WP-如何不断更新我的位置

Mvvm WP-如何不断更新我的位置,mvvm,windows-phone,mvvm-light,Mvvm,Windows Phone,Mvvm Light,当前,当我通过emulator将其更改为其他位置时,我的位置未更新。但在我重新启动应用程序后,它会改变。这是我在应用程序启动时写的 private void Application_Launching(object sender, LaunchingEventArgs e) { IsolatedStorageSettings Settings = IsolatedStorageSettings.ApplicationSettings; GeoCoo

当前,当我通过emulator将其更改为其他位置时,我的位置未更新。但在我重新启动应用程序后,它会改变。这是我在应用程序启动时写的

    private void Application_Launching(object sender, LaunchingEventArgs e)
    {
        IsolatedStorageSettings Settings = IsolatedStorageSettings.ApplicationSettings;
        GeoCoordinate DefaultLocation = new GeoCoordinate(-6.595139, 106.793801);
        Library.GPSServices MyGPS;

        if (!Settings.Contains("FirstLaunch") || (bool)Settings["FirstLaunch"] == true)
        {
            Settings["FirstLaunch"] = false;
            Settings["LastLocation"] = DefaultLocation;
            Settings["SearchRadius"] = 1;
        }

        //If key not exist OR key value was set to false, ask for permission to use location
        if (!Settings.Contains("LocationService") || (bool)Settings["LocationService"] == false)
        {
            var result = MessageBox.Show(
                "Jendela Bogor need to know your location to work correctly, do you want to allow it?",
                "Allow access to your location?",
                MessageBoxButton.OKCancel);

            if (result == MessageBoxResult.OK)
            {
                Settings["LocationService"] = true;
                MyGPS = new Library.GPSServices();
            }
            else
            {
                Settings["LocationService"] = false;
            }

            Settings.Save();
        }

        else if ((bool)Settings["LocationService"] == true)
        {
            MyGPS = new Library.GPSServices();
        }
    }
我使用名称
设置[“LastLocation”]

如何使用MVVM模式(MVVM灯)不断更新我在背景中的位置,以便始终更新第三页视图中地图上的
图钉

编辑

   public GPSServices()
    {
        if ((bool)Settings["LocationService"] == true)
        {          
            if (_watcher == null)
            {
                _watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High);
                _watcher.MovementThreshold = 20;
            }

            StartWatcher();

            _watcher.PositionChanged += new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(watcher_PositionChanged);
            _watcher.StatusChanged += new EventHandler<GeoPositionStatusChangedEventArgs>(watcher_StatusChanged);
        }
        else if ((bool)Settings["LocationService"] == false)
        {
            StopWatcher();
        }
    }

    private void StartWatcher()
    {
        _watcher.Start();
    }

    private void StopWatcher()
    {
        if (_watcher != null)
            _watcher.Stop();
    }

    private void watcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)
    {
        if (e.Position.Location.IsUnknown)
        {
            MessageBox.Show("Please wait while your position is determined....");
            return;
        }

        Settings["LastLocation"] = e.Position.Location;
        Settings.Save();
    }
publicGPSServices()
{
if((bool)设置[“LocationService”]==true)
{          
如果(_watcher==null)
{
_watcher=新的地理坐标记录器(地理位置精度高);
_watcher.MovementThreshold=20;
}
StartWatcher();
_watcher.PositionChanged+=新事件处理程序(watcher\u PositionChanged);
_watcher.StatusChanged+=新事件处理程序(watcher\u StatusChanged);
}
else if((bool)设置[“LocationService”]==false)
{
秒表();
}
}
私有void StartWatcher()
{
_watcher.Start();
}
私人void StopWatcher()
{
如果(_watcher!=null)
_watcher.Stop();
}
私有无效观察者位置已更改(对象发送者,地理位置更改Deventargs e)
{
如果(如位置位置未知)
{
MessageBox.Show(“正在确定您的位置,请稍候…”);
返回;
}
设置[“LastLocation”]=e.Position.Location;
设置。保存();
}

System.Device.Location.geocordinateWatcher
提供您所需的功能

var geoWatcher=新的地理坐标记录器(GeoPositionAccuracy.High);
//每次设备位置更改时都会触发此事件
geoWatcher.PositionChanged+=(s,e)=>{
//e、 位置。位置将包含当前地理坐标
};
geoWatcher.TryStart(false,TimeSpan.From毫秒(2000));
这对您有帮助吗?使用GeocoordinateWatcher.PositionChanged事件

公共位置()
{
GeoCoordinateWatcher位置==新的GeoCoordinateWatcher();
location.PositionChanged+=新事件处理程序(location\u PositionChanged);
location.Start();
}
//事件来跟踪位置更改
公共无效位置\u位置已更改(对象发送方,地理位置更改数据源)
{
}

My
GPSServices
class包含所有这些内容,请参阅我编辑的帖子。还是不走运。我没看到你在watcher_位置更新任何地图控件。您似乎只是将新位置保存到设置中。你需要在地图上标出新的位置。你们的GPSService类有什么方法可以在地图上标出一个位置吗?我已经解决了这个问题,我在
App
类中实例化了我的GPSService。但是,我不知道如何使用Dispatcher。也许通过使用Dispatcher,我可以更新地图上的新位置?Dispatcher用于在UI线程上执行代码,它与更新地图无关。如果您有权访问map控制变量,则可以在PositionChanged方法内绘制更新的位置。我从ViewModel绑定图钉,如何从GPSService类更新此属性?
public Location()
    {
        GeoCoordinateWatcher location == new GeoCoordinateWatcher();
        location.PositionChanged += new  EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(location_PositionChanged);
        location.Start();
    }


    //event to track the location change
    public void location_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)
    {

    }