code sweep

This commit is contained in:
Daniel Clark
2022-12-10 16:11:07 +00:00
parent 4f243eba2e
commit 0da4a37173
84 changed files with 2040 additions and 2104 deletions
@@ -5,91 +5,91 @@ using Avalonia.Data;
using Avalonia.Interactivity;
using Avalonia.Markup.Xaml;
using Mediator;
using Toolkit.Framework.Foundation;
namespace Toolkit.Foundation.Avalonia
namespace Toolkit.Foundation.Avalonia;
public class NavigationRouteExtension : MarkupExtension
{
public class NavigationRouteExtension : MarkupExtension
private static readonly AttachedProperty<IMediator> MediatorProperty =
AvaloniaProperty.RegisterAttached<NavigationRouteExtension, Control, IMediator>("Mediator");
private readonly string name;
private readonly Binding? mediatorBinding;
public NavigationRouteExtension(object mediator, string name)
{
private static readonly AttachedProperty<IMediator> MediatorProperty =
AvaloniaProperty.RegisterAttached<NavigationRouteExtension, Control, IMediator>("Mediator");
mediatorBinding = mediator is Binding toBinding ? toBinding : mediator.ToBinding();
this.name = name;
}
private readonly string name;
private readonly Binding? mediatorBinding;
private bool TryGetBinding(AvaloniaObject sender, out object? binding)
{
binding = sender.GetValue(StyledElement.DataContextProperty);
return binding is not null;
}
public NavigationRouteExtension(object mediator, string name)
public override object? ProvideValue(IServiceProvider serviceProvider)
{
if (serviceProvider.GetService(typeof(IProvideValueTarget)) is IProvideValueTarget target)
{
mediatorBinding = mediator is Binding toBinding ? toBinding : mediator.ToBinding();
this.name = name;
}
private bool TryGetBinding(AvaloniaObject sender, out object? binding)
{
binding = sender.GetValue(StyledElement.DataContextProperty);
return binding is not null;
}
public override object? ProvideValue(IServiceProvider serviceProvider)
{
if (serviceProvider.GetService(typeof(IProvideValueTarget)) is IProvideValueTarget target)
if (target.TargetObject is TemplatedControl control)
{
if (target.TargetObject is TemplatedControl control)
if (!TryGetBinding(control, out object? binding))
{
if (!TryGetBinding(control, out object? binding))
void HandleDataContextChanged(object? sender, EventArgs args)
{
void HandleDataContextChanged(object? sender, EventArgs args)
{
if (TryGetBinding(control, out binding))
{
control.Loaded -= HandleLoaded;
if (mediatorBinding is not null)
{
control.Bind(MediatorProperty, mediatorBinding);
if (control.GetValue(MediatorProperty) is IMediator mediator)
{
mediator.Send(new NavigationRoute(name, control));
control.ClearValue(MediatorProperty);
}
}
}
}
control.DataContextChanged += HandleDataContextChanged;
void HandleLoaded(object? sender, RoutedEventArgs args)
if (TryGetBinding(control, out binding))
{
control.Loaded -= HandleLoaded;
if (TryGetBinding(control, out binding))
if (mediatorBinding is not null)
{
if (mediatorBinding is not null)
control.Bind(MediatorProperty, mediatorBinding);
if (control.GetValue(MediatorProperty) is IMediator mediator)
{
control.Bind(MediatorProperty, mediatorBinding);
if (control.GetValue(MediatorProperty) is IMediator mediator)
{
mediator.Send(new NavigationRoute(name, control));
control.ClearValue(MediatorProperty);
}
mediator.Send(new NavigationRoute(name, control));
control.ClearValue(MediatorProperty);
}
}
}
control.Loaded += HandleLoaded;
}
else
control.DataContextChanged += HandleDataContextChanged;
void HandleLoaded(object? sender, RoutedEventArgs args)
{
if (mediatorBinding is not null)
control.Loaded -= HandleLoaded;
if (TryGetBinding(control, out binding))
{
control.Bind(MediatorProperty, mediatorBinding);
if (control.GetValue(MediatorProperty) is IMediator mediator)
if (mediatorBinding is not null)
{
mediator.Send(new NavigationRoute(name, control));
control.ClearValue(MediatorProperty);
control.Bind(MediatorProperty, mediatorBinding);
if (control.GetValue(MediatorProperty) is IMediator mediator)
{
mediator.Send(new NavigationRoute(name, control));
control.ClearValue(MediatorProperty);
}
}
}
}
control.Loaded += HandleLoaded;
}
else
{
if (mediatorBinding is not null)
{
control.Bind(MediatorProperty, mediatorBinding);
if (control.GetValue(MediatorProperty) is IMediator mediator)
{
mediator.Send(new NavigationRoute(name, control));
control.ClearValue(MediatorProperty);
}
}
}
}
return null;
}
return null;
}
}