using Microsoft.UI.Xaml.Controls;
using Microsoft.UI.Xaml.Navigation;
namespace XFEWarframe.Desktop.Editing;
/// <summary>Native back and sidebar navigation use the same unsaved-input protection.</summary>
public sealed class EquipmentNavigationGuard
{
private bool approved, prompting;
public async void Navigating(Page page, EquipmentEditorModel model, NavigatingCancelEventArgs args)
{
if (approved) { approved = false; return; }
if (model.IsBusy) { args.Cancel = true; return; }
if (!model.HasChanges) return;
args.Cancel = true;
if (prompting) return;
prompting = true;
try
{
if (!await model.CanDiscardAsync()) return;
approved = true;
if (args.NavigationMode == NavigationMode.Back) page.Frame.GoBack();
else if (args.NavigationMode == NavigationMode.Forward) page.Frame.GoForward();
else page.Frame.Navigate(args.SourcePageType, args.Parameter, args.NavigationTransitionInfo);
}
finally { prompting = false; }
}
}
using Microsoft.UI.Xaml.Controls;
using Microsoft.UI.Xaml.Navigation;
namespace XFEWarframe.Desktop.Editing;
/// <summary>Native back and sidebar navigation use the same unsaved-input protection.</summary>
public sealed class EquipmentNavigationGuard
{
private bool approved, prompting;
public async void Navigating(Page page, EquipmentEditorModel model, NavigatingCancelEventArgs args)
{
if (approved) { approved = false; return; }
if (model.IsBusy) { args.Cancel = true; return; }
if (!model.HasChanges) return;
args.Cancel = true;
if (prompting) return;
prompting = true;
try
{
if (!await model.CanDiscardAsync()) return;
approved = true;
if (args.NavigationMode == NavigationMode.Back) page.Frame.GoBack();
else if (args.NavigationMode == NavigationMode.Forward) page.Frame.GoForward();
else page.Frame.Navigate(args.SourcePageType, args.Parameter, args.NavigationTransitionInfo);
}
finally { prompting = false; }
}
}