Mvvm WP-如何不断更新我的位置
当前,当我通过emulator将其更改为其他位置时,我的位置未更新。但在我重新启动应用程序后,它会改变。这是我在应用程序启动时写的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
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位置已更改(对象发送方,地理位置更改数据源)
{
}
MyGPSServices
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)
{
}