Skip to content

Instantly share code, notes, and snippets.

@kevingosse
Created February 21, 2016 15:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kevingosse/8583b11a63790e2a39f1 to your computer and use it in GitHub Desktop.
Save kevingosse/8583b11a63790e2a39f1 to your computer and use it in GitHub Desktop.
public class NavigationService : IDisposable
{
public NavigationService()
{
SystemNavigationManager.GetForCurrentView().BackRequested += this.OnBackRequested;
}
public event EventHandler<BackRequestedEventArgs> PreemptiveBackRequested
{
add { this.SubscribeBefore(value); }
remove { this.BackRequested -= value; }
}
public event EventHandler<BackRequestedEventArgs> BackRequested;
public void SubscribeBefore(EventHandler<BackRequestedEventArgs> handler)
{
this.BackRequested = (EventHandler<BackRequestedEventArgs>)Delegate.Combine(handler, this.BackRequested);
}
public void Dispose()
{
SystemNavigationManager.GetForCurrentView().BackRequested -= this.OnBackRequested;
}
private void OnBackRequested(object sender, BackRequestedEventArgs e)
{
this.BackRequested?.Invoke(sender, e);
if (!e.Handled)
{
Debug.WriteLine("Back handled by navigation service");
e.Handled = true;
this.GoBack();
}
}
private void GoBack()
{
var rootFrame = Window.Current.Content as Frame;
if (rootFrame?.CanGoBack == true)
{
rootFrame.GoBack();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment