2014-03-25 42 views
0

我有一個保存在地圖類中的座標列表,這些座標被操縱來繪製點之間的路線,但我不確定如何在應用程序關閉然後重新打開時保存這些點。如何在應用程序被邏輯刪除後保存座標列表?

這就是我目前如何在OnNavigatedTo()中保存應用程序中的點數,只要不關閉它,點和標記就不會丟失。但是如何在關閉應用程序後保存這些座標?

我猜我應該將它們保存在OnNavigatedFrom中,但我試着在這裏保存座標列表,並且標記在我重新打開應用程序時不顯示。

//save the coordinates to a list 
mycoord.Add(new GeoCoordinate(MyGeoPosition.Latitude, MyGeoPosition.Longitude)); 

if (mycoord.Count == 2) 
{ 
    //call route method when coord list equal to two. 
    GetRoute(); 
} 
+2

如何保存併爲Windows Phone恢復應用程序狀態:http://msdn.microsoft.com/en-us/library/windowsphone/develop/ff967547(v=vs.105).aspx –

+0

[如何將座標列表保存到獨立存儲?](http://stackoverflow.com/questions/22563502/how-to-save-a-list-of-coordinates-to-isolated-storage) –

回答

1

可以做到這一點是可定製的是創建一個自定義對象,並將其序列使用EZ_Iso.dll

這裏手機的存儲最簡單的方法是一個例子

//Your custom GeoCoord container 
[DataContractAttribute] 
public class GeoCoordContainer{ 
    [DataMember] 
    public double lat = 0; 

    [DataMember] 
    public double lon = 0; 

    public GeoCoordContainer(Double lat, Double lon){ 
    this.lat = lat; 
    this.lon = lon; 
    } 
} 


//Then in your Navigated from method 
    GeoCoordContainer cont = new GeoCoordContainer(MyGeoPosition.Lattitude,MyGeoPosition.Longitued); 

    //Now save it to the storage using EZ_Iso 
    EZ_Iso.IsolatedStorageAccess.SaveFile("MyLocation",cont); 


//To Retrieve it from storage 
    GeoCoordContainer cont = (GeoCoordContainer)EZ_Iso.IsolatedStorageAccess.GetFile("MyLocation",typeof(GeoCoordContainer)); 

你可以找到EZ_I so.dll這裏免費http://anthonyrussell.info/postpage.php?name=2

+0

所以我實現了這一點,試圖找出如何檢索'MyGeoPosition'容器,因爲我需要用它來調用繪製方法。任何想法? –

+0

這裏很難調試。打我[email protected],我們可以進一步討論。 –

+0

是的,是的, –

1

使用墓碑助手http://tombstonehelper.codeplex.com/

protected override void OnNavigatingFrom(NavigatingCancelEventArgs e) 
{ 
this.SaveState(e); // <- first line 
} 

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
this.RestoreState(); // <- second line 
} 
+0

調用SaveState後查看頁面的狀態屬性,看看它保存了什麼,我懷疑它會保存你的地圖,不知道! – saj

+0

在討論主題中發佈一些疑問,你會在這裏找到答案,似乎很有幫助http://tombstonehelper.codeplex.com/discussions/ – saj

1

您可以創建這樣簡單的東西:

PhoneApplicationService.Current.State["latitude"] = MyGeoPosition.Latitude; 
PhoneApplicationService.Current.State["longitude"] = MyGeoPosition.Longitude; 

後來訪問它們爲:

var lat=PhoneApplicationService.Current.State["latitude"]; 
var lng=PhoneApplicationService.Current.State["longitude"]; 

你也可以試試:

private IsolatedStorageSettings appSettings = IsolatedStorageSettings.ApplicationSettings; 
appSettings.Add("latitude", MyGeoPosition.Latitude.ToString()); 
+0

@BrianJ做了那些工作? –

+0

我嘗試了以下方法,保存:'appSettings.Add(「latitude」,MyGeoPosition.Latitude.ToString());'並檢索:'MyGeoPosition.Latitude =(double)appSettings [「latitude」];'試圖在OnNavigatedTo()現在檢索哪裏 –

+0

@BrianJ你是絕對正確的。添加:'if(appSettings.Contains(「Latitude」))''將有助於檢查隔離存儲設置中的任何異常。 –

相關問題