Add Content lookup markupextension

This commit is contained in:
Daniel Clark
2022-12-14 20:07:45 +00:00
parent b77ee21d56
commit f7e682e0db
32 changed files with 783 additions and 229 deletions
+45 -49
View File
@@ -6,7 +6,6 @@ using Mediator;
using Toolkit.Framework.Foundation;
namespace Toolkit.Framework.Avalonia;
public class NavigateExtension : TriggerExtension
{
private static readonly AttachedProperty<IMediator> MediatorProperty =
@@ -412,74 +411,71 @@ public class NavigateExtension : TriggerExtension
protected override void OnInvoked(object sender, EventArgs args)
{
if (TargetObject is not null)
if (TargetObject is not null && mediatorBinding is not null)
{
if (mediatorBinding is not null)
TargetObject.Bind(MediatorProperty, mediatorBinding);
if (TargetObject.GetValue(MediatorProperty) is IMediator mediator)
{
TargetObject.Bind(MediatorProperty, mediatorBinding);
if (TargetObject.GetValue(MediatorProperty) is IMediator mediator)
if (toBinding is not null)
{
if (toBinding is not null)
TargetObject.Bind(ToProperty, toBinding);
if (TargetObject.GetValue(ToProperty) is { } to)
{
TargetObject.Bind(ToProperty, toBinding);
if (TargetObject.GetValue(ToProperty) is { } to)
List<object>? parameters = new();
foreach (object? parameter in this.parameters)
{
List<object>? parameters = new();
foreach (object? parameter in this.parameters)
if (parameter is not null)
{
if (parameter is not null)
switch (parameter)
{
switch (parameter)
{
case IParameter keyedParameter:
if (keyedParameter.GetValue(TargetObject) is KeyValuePair<string, object> keyValuePair)
{
parameters.Add(keyValuePair);
}
break;
case IParameter keyedParameter:
if (keyedParameter.GetValue(TargetObject) is KeyValuePair<string, object> keyValuePair)
{
parameters.Add(keyValuePair);
}
break;
case IEventParameter eventParameter:
parameters.AddRange(eventParameter.GetValues(args));
break;
case IEventParameter eventParameter:
parameters.AddRange(eventParameter.GetValues(args));
break;
default:
if (parameter.ToBinding() is Binding defaultDinding)
{
TargetObject.Bind(ParameterProperty, defaultDinding);
parameters.Add((dynamic)TargetObject.GetValue(ParameterProperty));
}
break;
}
default:
if (parameter.ToBinding() is Binding defaultDinding)
{
TargetObject.Bind(ParameterProperty, defaultDinding);
parameters.Add((dynamic)TargetObject.GetValue(ParameterProperty));
}
break;
}
}
}
object? route = null;
if (routeBinding is not null)
object? route = null;
if (routeBinding is not null)
{
TargetObject.Bind(RouteProperty, routeBinding);
route = TargetObject.GetValue(RouteProperty);
}
if (to is string name)
{
if (toBinding?.StringFormat is string format)
{
TargetObject.Bind(RouteProperty, routeBinding);
route = TargetObject.GetValue(RouteProperty);
name = string.Format(format, name);
}
if (to is string name)
{
if (toBinding?.StringFormat is string format)
{
name = string.Format(format, name);
}
mediator.Send(new Navigate(name, parameters.ToArray()) { Route = route });
}
mediator.Send(new Navigate(name, parameters.ToArray()) { Route = route });
}
if (to is Type type)
{
mediator.Send(new Navigate(type, parameters.ToArray()) { Route = route });
}
if (to is Type type)
{
mediator.Send(new Navigate(type, parameters.ToArray()) { Route = route });
}
}
}
base.OnInvoked(sender, args);
}
base.OnInvoked(sender, args);
}
}
}