2014-07-25 72 views
10

我的問題與Passing data from page to page完全相同,但僅適用於Windows Phone 8.1(與Windows Phone 7相反)。這裏是問題:將頁面傳遞給Windows Phone 8.1的頁面

我正在尋找關於如何在頁面間傳遞數據的最佳做法。

在頁面A我有一個按鈕,關閉頁面B. 在頁面B我有6個文本框允許用戶輸入信息。當用戶完成,帶來他們回到頁面A.按鈕上的點擊

我想通過這些數據返回到頁面A.

我見過的建議:

構建XML文檔並保存到獨立存儲 使用App類將屬性信息存儲在 傳遞它像查詢字符串 我正在尋找最佳實踐。是否有微軟推薦的或通常被認爲是最好的方法?

感謝

回答

16

在WP8.1運行 - 對Silverlight的the methods used in WP8.0還是應該努力 - 你有幾個choces的:

  • 第一,可能是最簡單的方法是使用Navigate with parameter - 如果它是可序列化類型,則不必將其轉換爲字符串

    // let's assume that you have a simple class: 
    public class PassedData 
    { 
        public string Name { get; set; } 
        public int Value { get; set; } 
    } 
    
    // then you navigate like this: 
    Frame.Navigate(typeof(Page1), new PassedData { Name = "my name", Value = 10 }); 
    
    // and in target Page you retrive the information: 
    protected override void OnNavigatedTo(NavigationEventArgs e) 
    { 
        PassedData data = e.Parameter as PassedData; 
    } 
    
  • 你可以使用一些靜態對象傳遞您的數據一起在App

  • 終於如你所說,你可以保存你的數據:LocalSettings的localStorageLocalCache - 在這種情況下,認爲你還必須將它序列化爲XAML,Json或其他。

請注意,您還必須處理應用程序掛起/恢復 - 所以它適合在應用程序暫停時保存數據並在恢復時加載。您應該記住,當應用程序恢復時,不會調用OnNavigatedTo


以上是關於正常導航(向前)。如果你想以填補之前的頁面中的一些數據,那麼你有兩個選擇:

  • 傳遞處理到前一頁,這樣你就可以從當前的頁面訪問公共變量/屬性,
  • 使用靜態變量/屬性 - 可能是單身
  • 再次使用文件/設置

注意,再前兩種方法的缺點是,應用可被暫停之後崩潰。保存到文件可能會更好,認爲需要更多的工作和適當的處理。

+0

如果我們想要傳遞多個參數,那麼哪種方法更好? –

+0

@KinjanBhavsar它取決於你的參數的類型,它們的重要性以及其他實現。 – Romasz

+0

我想傳遞一個類的對象和一個來自其他類的字符串參數。 –

0

- 第一個創建一個類

public class PassedData 
{ 
    public string email { get; set; } 
} 

--then您可以頁面內導航掛值

Frame.Navigate(typeof(Frame2), new PassedData { email = emailtxt.Text }); 

--then趕上,傳遞另一頁

var passedData = e.Parameter as PassedData; 

emailtxt.Text = passedData.email;