forked from amkovkov/GranuSightSoftware2
refactor: NavigateService
This commit is contained in:
@@ -1,12 +1,19 @@
|
||||
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Controls.ApplicationLifetimes;
|
||||
|
||||
namespace GSS2.UI.Core.Services;
|
||||
|
||||
/// <summary>
|
||||
/// <see cref="NavigationService"/> - сервис навигации между компонентами,
|
||||
/// работающий с режимами главного окна <see cref="IClassicDesktopStyleApplicationLifetime"/>
|
||||
/// и одного представления <see cref="ISingleViewApplicationLifetime"/>.<br/>
|
||||
/// Условием его работы в режиме главного окна является то, что
|
||||
/// <see cref="IClassicDesktopStyleApplicationLifetime.MainWindow"/> является
|
||||
/// <see cref="MainWindow"/>
|
||||
/// </summary>
|
||||
public class NavigationService
|
||||
{
|
||||
private readonly Stack<UserControl> _navigateControls = new Stack<UserControl>();
|
||||
private readonly Stack<Control> _navigateControls = new Stack<Control>();
|
||||
private readonly IApplicationLifetime? _applicationLifetime;
|
||||
|
||||
public NavigationService(IApplicationLifetime? applicationLifetime)
|
||||
@@ -14,7 +21,11 @@ public class NavigationService
|
||||
_applicationLifetime = applicationLifetime;
|
||||
}
|
||||
|
||||
public void NavigateTo(UserControl control)
|
||||
/// <summary>
|
||||
/// Перейти к новому элементу управления
|
||||
/// </summary>
|
||||
/// <param name="control">Новый элемент управления</param>
|
||||
public void NavigateTo(Control control)
|
||||
{
|
||||
_navigateControls.Push(control);
|
||||
|
||||
@@ -22,7 +33,6 @@ public class NavigationService
|
||||
{
|
||||
case IClassicDesktopStyleApplicationLifetime desktop
|
||||
when desktop.MainWindow is MainWindow mainWindow:
|
||||
|
||||
mainWindow.SetControl(control);
|
||||
break;
|
||||
|
||||
@@ -32,7 +42,14 @@ public class NavigationService
|
||||
}
|
||||
}
|
||||
|
||||
public void NavigateBack()
|
||||
/// <summary>
|
||||
/// Вернутся к предыдущему элементу управления
|
||||
/// </summary>
|
||||
/// <param name="dispose">
|
||||
/// Если <see langword="true"/> и если элемент управления от которого происходит переход, реализует интерфейс
|
||||
/// <see cref="IDisposable"/>, то будет вызван его метод <see cref="IDisposable.Dispose"/>
|
||||
/// </param>
|
||||
public void NavigateBack(bool dispose = true)
|
||||
{
|
||||
if (_navigateControls.Count <= 1)
|
||||
return;
|
||||
@@ -53,7 +70,7 @@ public class NavigationService
|
||||
break;
|
||||
}
|
||||
|
||||
if (lastControl is IDisposable disposable)
|
||||
if (dispose && lastControl is IDisposable disposable)
|
||||
disposable.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user