1

我想導航到NavigationStack中的頁面,而無需重新創建新實例或修改NavigationStack。Windows Phone導航

這可能嗎?

例如:

NavigationStack: 
    Page1.xaml 
    Page2.xaml 
    Page3.xaml 

現在假設我在的Page1.xaml,並希望再次導航到Page3.xaml。 如果我運行

NavigationService.Navigate(new Uri("/Page3.xaml", UriKind.Relative));
它創建另一個Page1對象並導航到那個,但我想再次使用現有的頁面對象。

感謝

+0

你想讓它返回到你的頁面,並希望該頁面返回到它是當你離開它創建靜態對象這是第一次? – robertk

+0

是的,這正是我想表達的意思。 – mehmet6parmak

回答

2

調用NavigationService.Navigate()將在指定頁面的新實例。這就是系統的工作方式。

如果要導航到存在於後退堆疊中的頁面,有兩個選項。

  1. 查詢返回堆棧並返回有問題的頁面。這樣做的後果是,您可能會破壞感知的堆棧行爲,並且頁面生命週期也可能存在其他需要解決的問題。您還需要以不使用查詢字符串的方式在要導航的頁面之間進行通信。

  2. 將頁面完全綁定到單例視圖模型。即頁面上的所有內容都綁定到視圖模型的單個實例。如果您然後導航到該頁面的新實例(假設導航不會更改/更新虛擬機),它將具有與背堆棧中的任何其他實例相同的數據,配置等。

您的應用程序應遵循中心和輻射結構進行導航。上述任何一種做法都可能會打破用戶對預期的看法。如果您執行以上任何操作,請務必與熟悉該平臺的用戶徹底測試,並瞭解打破平臺約定的後果。

+0

如何查詢BackStack?例如,我在Page3上並且想要在Page1上導航,那麼我怎麼知道Page1實例已經存在於backStack中? –

+0

@Android_Crazy在問題的例子中,他們總是會知道如果他們到了page3,就會有page1。有關您可以使用該堆棧執行的操作,請參閱http://msdn.microsoft.com/zh-cn/library/system.windows.navigation.navigationservice.aspx –