Files
Toolkit2/Framework/Avalonia/Navigation/NavigationRouteHandler.cs
T
Daniel Clark 8bbff9bfd1 code sweep
2022-12-10 16:11:43 +00:00

39 lines
1.2 KiB
C#

using Avalonia.Controls.Primitives;
using Avalonia.Interactivity;
using Mediator;
using Toolkit.Framework.Foundation;
namespace Toolkit.Foundation.Avalonia;
public class NavigationRouteHandler : IRequestHandler<NavigationRoute>
{
private readonly INavigationRouteDescriptorCollection descriptors;
public NavigationRouteHandler(INavigationRouteDescriptorCollection descriptors)
{
this.descriptors = descriptors;
}
public ValueTask<Unit> Handle(NavigationRoute request, CancellationToken cancellationToken)
{
if (request.Route is TemplatedControl control)
{
void HandleUnloaded(object? sender, RoutedEventArgs args)
{
if (descriptors.FirstOrDefault(x => x.Route == sender) is INavigationRouteDescriptor descriptor)
{
descriptors.Remove(descriptor);
}
}
control.Unloaded += HandleUnloaded;
}
if (descriptors.FirstOrDefault(x => x.Name == request.Name) is INavigationRouteDescriptor descriptor)
{
descriptors.Remove(descriptor);
}
descriptors.Add(new NavigationRouteDescriptor(request.Name, request.Route));
return default;
}
}