2011-10-20 28 views
2

我有一個Windows Phone 7.1應用程序,其中有三個頁面,每個頁面上有3個按鈕:第一個導致頁面編號。 1,第二導致頁面號。 2和第三導致第頁。 3.WP7:是否可以導航到後臺堆棧中的頁面,而不是創建該頁面的新實例?

問題是,如果我去頁1然後頁2 - 然後如果我點擊第一個按鈕導航到第一頁,該頁面的新實例將被創建。我不想創建新的實例,而是想從後面的堆棧導航到現有的頁面實例。

可能嗎?

回答

2

是的,你需要通過觸發回去(主要是等同於用戶按下後退鍵)向後手動導航:

NavigationService.GoBack();

這將利用回堆由OS維護。它會彈出第2頁並重新設置第1頁。請注意,您不能選擇要返回的頁面,如果有頁面返回,它會向後翻一頁。因此,例如,觸發從頁面向後導航3中你會看到第2頁,你可以不接第1

或者,但不建議,你可以在7.1彈出頁面斷背棧:

NavigationService.RemoveBackEntry();

然後,您可以手動導航到頁面。但嚴重的是,儘量不要這樣做,因爲它會打破用戶的期望,除非您自己管理頁面支持。

+0

我明白了。我知道GoBack()方法,但我正在尋找一種方法來選擇要返回的頁面。將它們從後臺堆棧中刪除並且一次只保留一個頁面實例絕對是一個解決方案。爲什麼我想要這樣做:如果您使用的應用程序與我上面描述的應用程序的作用相同,例如5分鐘,並且您將在20頁之間瀏覽這些頁面,那麼您需要反覆20次以便關閉該應用程序。 –

+0

不,如果您在適當的時候使用'GoBack'在頁面之間導航,它會彈出您從堆棧中取出的頁面。在你的情況下,如果做得好,你的堆棧最多隻能有2頁大。此外,頁面之間的按鈕不符合用戶的期望。如果用戶在第2頁並想要進入第1頁,那麼他們將使用後退按鈕的可能性非常大。 –

+0

@AdamHouldsworth對不起,我有一個關於'但是嚴重的問題,儘量不要這樣做,因爲它會打亂用戶的期望,除非您自己管理頁面支持.'在我的場景中,我有頁面:MainMenu ) - >設置 - > ListOfStores - > StoreDetails(這裏用戶可以確認選中的商店,這會觸發MainMenu的更新)。如何在沒有使用nonlinearnavigationservice的情況下以「用戶預期」方式選擇商店後返回主頁面? –

1

您會更適合使用MVVM等框架來控制數據,而不是依賴頁面的特定實例,但仍然記住用戶在該頁面上的位置。

MVVMLight是一個不錯的選擇 - http://mvvmlight.codeplex.com/

然後,您就只需要應用程序決定應用程序應該如何流動,而不是依靠返回堆棧中更好地控制您的導航。返回僅僅意味着根據用戶的選擇而不是你的應用程序的流向(不依賴於它)。

諸如刪除芒果條目等功能是一個解決方案,用於解決用戶在家中導航時遇到的問題,並希望避免返回到應用程序流中的無效點。

+0

數據控制不是問題,我已經在使用MVVM。我只是擔心這可能會影響性能。 –

相關問題