Files
GSS2Rework/GSS2.UI.Core/Services/NavigateService.cs
T

60 lines
1.6 KiB
C#

using Avalonia.Controls;
using Avalonia.Controls.ApplicationLifetimes;
namespace GSS2.UI.Core.Services;
public class NavigationService
{
private readonly Stack<UserControl> _navigateControls = new Stack<UserControl>();
private readonly IApplicationLifetime? _applicationLifetime;
public NavigationService(IApplicationLifetime? applicationLifetime)
{
_applicationLifetime = applicationLifetime;
}
public void NavigateTo(UserControl control)
{
_navigateControls.Push(control);
switch (_applicationLifetime)
{
case IClassicDesktopStyleApplicationLifetime desktop
when desktop.MainWindow is MainWindow mainWindow:
mainWindow.SetControl(control);
break;
case ISingleViewApplicationLifetime singleView:
singleView.MainView = control;
break;
}
}
public void NavigateBack()
{
if (_navigateControls.Count <= 1)
return;
var lastControl = _navigateControls.Pop();
var control = _navigateControls.Peek();
switch (_applicationLifetime)
{
case IClassicDesktopStyleApplicationLifetime desktop
when desktop.MainWindow is MainWindow mainWindow:
mainWindow.SetControl(control);
break;
case ISingleViewApplicationLifetime singleView:
singleView.MainView = control;
break;
}
if (lastControl is IDisposable disposable)
disposable.Dispose();
}
}