Mahender
Mahender

Reputation: 5664

navigating to same page in windows phone 8

In my WP8 app, i have situation where i have to navigate from one page to another and afterwards i need to reload the same page for some reasons.

MainPage.xaml --> Page1.xaml --> Page1.xaml --> Page1.xaml

When user press the backkey should go back to "MainPage.xaml" page.

I tried using the NavigationService.navigate() for navigation, some reason i couldn't able to reload the page. If i pass any unique query strings (eg: Guid) with navigation url, i am able to reload the page. But, when i press back button - it never goes back to Mainpage.xaml page.

Is there any best way to achieve this?

Upvotes: 4

Views: 6173

Answers (4)

JBernardo
JBernardo

Reputation: 33397

Because I couldn't find any Windows 10 (Universal apps UWP UAP) questions about this, and this one seems to be top result on google search to reload a page, here is a solution:

NavigationService.Refresh();

I'm using Template 10 on my app, so I don't know if it matters here. The lib encapsulates NavigationService on its own INavigationService

Upvotes: 0

Tanmay Baranwal
Tanmay Baranwal

Reputation: 185

NavigationService.Navigate(new Uri("/MainPage.xaml?" + DateTime.Now.Ticks, UriKind.Relative));

You can use it under a control to navigate to same page

Upvotes: 1

keyboardP
keyboardP

Reputation: 69372

Pass in a query string every time you reload the page (such as your random GUID). On your OnNavigatedTo method check if the GUID query string exists. If it does exist, you know that you don't want this page on the Navigation Stack because it's the reloaded version, so you can remove it by calling NavigationService.RemoveBackEntry.

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    string guid = string.Empty;
    if (NavigationContext.QueryString.TryGetValue("guid", out guid))
    {
       //guid exists therefore it's a reload, so delete the last entry
       //from the navigation stack
       if(NavigationService.CanGoBack)
          NavigationService.RemoveBackEntry();
    }
}

Upvotes: 5

MarcinJuraszek
MarcinJuraszek

Reputation: 125630

Use NavigationService.RemoveBackEntry method to remove last navigation stack entry.

You can also remove all elements from navigation history:

while(service.CanGoBack)
    service.RemoveBackEntry();

and then add the one you're interested in.

Upvotes: 2

Related Questions