Instantly share code, notes, and snippets.
kevingosse/NavigationService.cs
Secret
Created Feb 21, 2016
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