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