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
+15 -19
View File
@@ -1,21 +1,17 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<PropertyGroup> <TargetFramework>net7.0</TargetFramework>
<TargetFramework>net7.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings>
<ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable>
<Nullable>enable</Nullable> <AssemblyName>Toolkit.Foundation.Avalonia</AssemblyName>
<AssemblyName>Toolkit.Foundation.Avalonia</AssemblyName> <RootNamespace>Toolkit.Foundation.Avalonia</RootNamespace>
<RootNamespace>Toolkit.Foundation.Avalonia</RootNamespace> </PropertyGroup>
</PropertyGroup> <ItemGroup>
<PackageReference Include="Avalonia" Version="11.0.0-preview4" />
<ItemGroup> <PackageReference Include="FluentAvaloniaUI" Version="2.0.0-preview4" />
<PackageReference Include="Avalonia" Version="11.0.0-preview4" /> <PackageReference Include="Mediator.Abstractions" Version="2.1.0-preview.5" />
<PackageReference Include="FluentAvaloniaUI" Version="2.0.0-preview4" /> </ItemGroup>
<PackageReference Include="Mediator.Abstractions" Version="2.1.0-preview.5" /> <ItemGroup>
</ItemGroup> <ProjectReference Include="..\Foundation\Foundation.csproj" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Foundation\Foundation.csproj" />
</ItemGroup>
</Project> </Project>
@@ -1,7 +1,7 @@
using Mediator; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting;
using Toolkit.Framework.Foundation;
namespace Toolkit.Foundation.Avalonia namespace Toolkit.Foundation.Avalonia
{ {
@@ -2,6 +2,7 @@
using FluentAvalonia.UI.Controls; using FluentAvalonia.UI.Controls;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.DependencyInjection.Extensions;
using Toolkit.Framework.Foundation;
namespace Toolkit.Foundation.Avalonia namespace Toolkit.Foundation.Avalonia
{ {
+310 -311
View File
@@ -1,321 +1,320 @@
using Avalonia.Markup.Xaml; using Avalonia.Markup.Xaml;
namespace Toolkit.Foundation.Avalonia namespace Toolkit.Foundation.Avalonia;
public class CompositeExtension : TriggerExtension
{ {
public class CompositeExtension : TriggerExtension [ConstructorArgument(nameof(Triggers))]
public TriggerCollection Triggers { get; } = new TriggerCollection();
public CompositeExtension(object args0)
{ {
[ConstructorArgument(nameof(Triggers))] Triggers.Add(args0);
public TriggerCollection Triggers { get; } = new TriggerCollection(); }
public CompositeExtension(object args0) public CompositeExtension(object args0,
object args1)
{
Triggers.Add(args0);
Triggers.Add(args1);
}
public CompositeExtension(object args0,
object args1,
object args2)
{
Triggers.Add(args0);
Triggers.Add(args1);
Triggers.Add(args2);
}
public CompositeExtension(object args0,
object args1,
object args2,
object args3)
{
Triggers.Add(args0);
Triggers.Add(args1);
Triggers.Add(args2);
Triggers.Add(args3);
}
public CompositeExtension(object args0,
object args1,
object args2,
object args3,
object args4)
{
Triggers.Add(args0);
Triggers.Add(args1);
Triggers.Add(args2);
Triggers.Add(args3);
Triggers.Add(args4);
}
public CompositeExtension(object args0,
object args1,
object args2,
object args3,
object args4,
object args5)
{
Triggers.Add(args0);
Triggers.Add(args1);
Triggers.Add(args2);
Triggers.Add(args3);
Triggers.Add(args4);
Triggers.Add(args5);
}
public CompositeExtension(object args0,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6)
{
Triggers.Add(args0);
Triggers.Add(args1);
Triggers.Add(args2);
Triggers.Add(args3);
Triggers.Add(args4);
Triggers.Add(args5);
Triggers.Add(args6);
}
public CompositeExtension(object args0,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7)
{
Triggers.Add(args0);
Triggers.Add(args1);
Triggers.Add(args2);
Triggers.Add(args3);
Triggers.Add(args4);
Triggers.Add(args5);
Triggers.Add(args6);
Triggers.Add(args7);
}
public CompositeExtension(object args0,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8)
{
Triggers.Add(args0);
Triggers.Add(args1);
Triggers.Add(args2);
Triggers.Add(args3);
Triggers.Add(args4);
Triggers.Add(args5);
Triggers.Add(args6);
Triggers.Add(args7);
Triggers.Add(args8);
}
public CompositeExtension(object args0,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9)
{
Triggers.Add(args0);
Triggers.Add(args1);
Triggers.Add(args2);
Triggers.Add(args3);
Triggers.Add(args4);
Triggers.Add(args5);
Triggers.Add(args6);
Triggers.Add(args7);
Triggers.Add(args8);
Triggers.Add(args9);
}
public CompositeExtension(object args0, object args1, object args2, object args3, object args4,
object args5, object args6, object args7, object args8, object args9, object args10)
{
Triggers.Add(args0);
Triggers.Add(args1);
Triggers.Add(args2);
Triggers.Add(args3);
Triggers.Add(args4);
Triggers.Add(args5);
Triggers.Add(args6);
Triggers.Add(args7);
Triggers.Add(args8);
Triggers.Add(args9);
Triggers.Add(args10);
}
public CompositeExtension(object args0, object args1, object args2, object args3, object args4,
object args5, object args6, object args7, object args8, object args9, object args10, object args11)
{
Triggers.Add(args0);
Triggers.Add(args1);
Triggers.Add(args2);
Triggers.Add(args3);
Triggers.Add(args4);
Triggers.Add(args5);
Triggers.Add(args6);
Triggers.Add(args7);
Triggers.Add(args8);
Triggers.Add(args9);
Triggers.Add(args10);
Triggers.Add(args11);
}
public CompositeExtension(object args0,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9,
object args10,
object args11,
object args12)
{
Triggers.Add(args0);
Triggers.Add(args1);
Triggers.Add(args2);
Triggers.Add(args3);
Triggers.Add(args4);
Triggers.Add(args5);
Triggers.Add(args6);
Triggers.Add(args7);
Triggers.Add(args8);
Triggers.Add(args9);
Triggers.Add(args10);
Triggers.Add(args11);
Triggers.Add(args12);
}
public CompositeExtension(object args0,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9,
object args10,
object args11,
object args12,
object args13)
{
Triggers.Add(args0);
Triggers.Add(args1);
Triggers.Add(args2);
Triggers.Add(args3);
Triggers.Add(args4);
Triggers.Add(args5);
Triggers.Add(args6);
Triggers.Add(args7);
Triggers.Add(args8);
Triggers.Add(args9);
Triggers.Add(args10);
Triggers.Add(args11);
Triggers.Add(args12);
Triggers.Add(args13);
}
public CompositeExtension(object args0,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9,
object args10,
object args11,
object args12,
object args13,
object args14)
{
Triggers.Add(args0);
Triggers.Add(args1);
Triggers.Add(args2);
Triggers.Add(args3);
Triggers.Add(args4);
Triggers.Add(args5);
Triggers.Add(args6);
Triggers.Add(args7);
Triggers.Add(args8);
Triggers.Add(args9);
Triggers.Add(args10);
Triggers.Add(args11);
Triggers.Add(args12);
Triggers.Add(args13);
Triggers.Add(args14);
}
public CompositeExtension(object args0,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9,
object args10,
object args11,
object args12,
object args13,
object args14,
object args15)
{
Triggers.Add(args0);
Triggers.Add(args1);
Triggers.Add(args2);
Triggers.Add(args3);
Triggers.Add(args4);
Triggers.Add(args5);
Triggers.Add(args6);
Triggers.Add(args7);
Triggers.Add(args8);
Triggers.Add(args9);
Triggers.Add(args10);
Triggers.Add(args11);
Triggers.Add(args12);
Triggers.Add(args13);
Triggers.Add(args14);
Triggers.Add(args15);
}
protected override void OnInvoked(object sender, EventArgs args)
{
foreach (Delegate? trigger in Triggers)
{ {
Triggers.Add(args0); trigger.Method.Invoke(trigger.Target, new object[] { sender, args });
} }
public CompositeExtension(object args0, base.OnInvoked(sender, args);
object args1)
{
Triggers.Add(args0);
Triggers.Add(args1);
}
public CompositeExtension(object args0,
object args1,
object args2)
{
Triggers.Add(args0);
Triggers.Add(args1);
Triggers.Add(args2);
}
public CompositeExtension(object args0,
object args1,
object args2,
object args3)
{
Triggers.Add(args0);
Triggers.Add(args1);
Triggers.Add(args2);
Triggers.Add(args3);
}
public CompositeExtension(object args0,
object args1,
object args2,
object args3,
object args4)
{
Triggers.Add(args0);
Triggers.Add(args1);
Triggers.Add(args2);
Triggers.Add(args3);
Triggers.Add(args4);
}
public CompositeExtension(object args0,
object args1,
object args2,
object args3,
object args4,
object args5)
{
Triggers.Add(args0);
Triggers.Add(args1);
Triggers.Add(args2);
Triggers.Add(args3);
Triggers.Add(args4);
Triggers.Add(args5);
}
public CompositeExtension(object args0,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6)
{
Triggers.Add(args0);
Triggers.Add(args1);
Triggers.Add(args2);
Triggers.Add(args3);
Triggers.Add(args4);
Triggers.Add(args5);
Triggers.Add(args6);
}
public CompositeExtension(object args0,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7)
{
Triggers.Add(args0);
Triggers.Add(args1);
Triggers.Add(args2);
Triggers.Add(args3);
Triggers.Add(args4);
Triggers.Add(args5);
Triggers.Add(args6);
Triggers.Add(args7);
}
public CompositeExtension(object args0,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8)
{
Triggers.Add(args0);
Triggers.Add(args1);
Triggers.Add(args2);
Triggers.Add(args3);
Triggers.Add(args4);
Triggers.Add(args5);
Triggers.Add(args6);
Triggers.Add(args7);
Triggers.Add(args8);
}
public CompositeExtension(object args0,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9)
{
Triggers.Add(args0);
Triggers.Add(args1);
Triggers.Add(args2);
Triggers.Add(args3);
Triggers.Add(args4);
Triggers.Add(args5);
Triggers.Add(args6);
Triggers.Add(args7);
Triggers.Add(args8);
Triggers.Add(args9);
}
public CompositeExtension(object args0, object args1, object args2, object args3, object args4,
object args5, object args6, object args7, object args8, object args9, object args10)
{
Triggers.Add(args0);
Triggers.Add(args1);
Triggers.Add(args2);
Triggers.Add(args3);
Triggers.Add(args4);
Triggers.Add(args5);
Triggers.Add(args6);
Triggers.Add(args7);
Triggers.Add(args8);
Triggers.Add(args9);
Triggers.Add(args10);
}
public CompositeExtension(object args0, object args1, object args2, object args3, object args4,
object args5, object args6, object args7, object args8, object args9, object args10, object args11)
{
Triggers.Add(args0);
Triggers.Add(args1);
Triggers.Add(args2);
Triggers.Add(args3);
Triggers.Add(args4);
Triggers.Add(args5);
Triggers.Add(args6);
Triggers.Add(args7);
Triggers.Add(args8);
Triggers.Add(args9);
Triggers.Add(args10);
Triggers.Add(args11);
}
public CompositeExtension(object args0,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9,
object args10,
object args11,
object args12)
{
Triggers.Add(args0);
Triggers.Add(args1);
Triggers.Add(args2);
Triggers.Add(args3);
Triggers.Add(args4);
Triggers.Add(args5);
Triggers.Add(args6);
Triggers.Add(args7);
Triggers.Add(args8);
Triggers.Add(args9);
Triggers.Add(args10);
Triggers.Add(args11);
Triggers.Add(args12);
}
public CompositeExtension(object args0,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9,
object args10,
object args11,
object args12,
object args13)
{
Triggers.Add(args0);
Triggers.Add(args1);
Triggers.Add(args2);
Triggers.Add(args3);
Triggers.Add(args4);
Triggers.Add(args5);
Triggers.Add(args6);
Triggers.Add(args7);
Triggers.Add(args8);
Triggers.Add(args9);
Triggers.Add(args10);
Triggers.Add(args11);
Triggers.Add(args12);
Triggers.Add(args13);
}
public CompositeExtension(object args0,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9,
object args10,
object args11,
object args12,
object args13,
object args14)
{
Triggers.Add(args0);
Triggers.Add(args1);
Triggers.Add(args2);
Triggers.Add(args3);
Triggers.Add(args4);
Triggers.Add(args5);
Triggers.Add(args6);
Triggers.Add(args7);
Triggers.Add(args8);
Triggers.Add(args9);
Triggers.Add(args10);
Triggers.Add(args11);
Triggers.Add(args12);
Triggers.Add(args13);
Triggers.Add(args14);
}
public CompositeExtension(object args0,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9,
object args10,
object args11,
object args12,
object args13,
object args14,
object args15)
{
Triggers.Add(args0);
Triggers.Add(args1);
Triggers.Add(args2);
Triggers.Add(args3);
Triggers.Add(args4);
Triggers.Add(args5);
Triggers.Add(args6);
Triggers.Add(args7);
Triggers.Add(args8);
Triggers.Add(args9);
Triggers.Add(args10);
Triggers.Add(args11);
Triggers.Add(args12);
Triggers.Add(args13);
Triggers.Add(args14);
Triggers.Add(args15);
}
protected override void OnInvoked(object sender, EventArgs args)
{
foreach (Delegate? trigger in Triggers)
{
trigger.Method.Invoke(trigger.Target, new object[] { sender, args });
}
base.OnInvoked(sender, args);
}
} }
} }
@@ -1,65 +1,63 @@
using Avalonia.Data.Converters; using Avalonia.Data.Converters;
using Avalonia.Markup.Xaml; using Avalonia.Markup.Xaml;
namespace Toolkit.Foundation.Avalonia namespace Toolkit.Foundation.Avalonia;
public class EventParameterExtension : MarkupExtension, IEventParameter
{ {
public class EventParameterExtension : MarkupExtension, IEventParameter private readonly IValueConverter? converter;
private readonly object? converterParameter;
private readonly string? key;
private readonly string? path;
public EventParameterExtension()
{ {
private readonly IValueConverter? converter; }
private readonly object? converterParameter; public EventParameterExtension(string key, string path)
{
this.key = key;
this.path = path;
}
private readonly string? key; public EventParameterExtension(string path)
private readonly string? path; {
this.path = path;
}
public EventParameterExtension() public EventParameterExtension(IValueConverter? converter = null, object? converterParameter = null)
{
this.converter = converter;
this.converterParameter = converterParameter;
}
public List<object> GetValues(EventArgs args)
{
List<object>? parameters = new();
dynamic? arguments = args.GetEventArguments(path, converter, converterParameter);
if (arguments is not null)
{ {
if (arguments is ICollection<object> collection)
}
public EventParameterExtension(string key, string path)
{
this.key = key;
this.path = path;
}
public EventParameterExtension(string path)
{
this.path = path;
}
public EventParameterExtension(IValueConverter? converter = null, object? converterParameter = null)
{
this.converter = converter;
this.converterParameter = converterParameter;
}
public List<object> GetValues(EventArgs args)
{
List<object>? parameters = new();
dynamic? arguments = args.GetEventArguments(path, converter, converterParameter);
if (arguments is not null)
{ {
if (arguments is ICollection<object> collection) foreach (object? argument in collection)
{ {
foreach (object? argument in collection) parameters.Add(key is not null ? new KeyValuePair<string, object>(key, (dynamic)argument) : argument);
{
parameters.Add(key is not null ? new KeyValuePair<string, object>(key, (dynamic)argument) : argument);
}
}
else
{
parameters.Add(key is not null ? new KeyValuePair<string, object>(key, arguments) : arguments);
} }
} }
else
return parameters; {
parameters.Add(key is not null ? new KeyValuePair<string, object>(key, arguments) : arguments);
}
} }
public override object ProvideValue(IServiceProvider serviceProvider) return parameters;
{ }
return this;
} public override object ProvideValue(IServiceProvider serviceProvider)
{
return this;
} }
} }
+389 -390
View File
@@ -5,420 +5,419 @@ using Avalonia.Markup.Xaml;
using System.Diagnostics.CodeAnalysis; using System.Diagnostics.CodeAnalysis;
using System.Reflection; using System.Reflection;
namespace Toolkit.Foundation.Avalonia namespace Toolkit.Foundation.Avalonia;
public class InvokeExtension : TriggerExtension
{ {
public class InvokeExtension : TriggerExtension private static readonly AvaloniaProperty TargetProperty =
AvaloniaProperty.RegisterAttached<InvokeExtension, Control, object>("Target");
private readonly object path;
private readonly List<object?> parameters = new();
public InvokeExtension(object path)
{ {
private static readonly AvaloniaProperty TargetProperty = this.path = path;
AvaloniaProperty.RegisterAttached<InvokeExtension, Control, object>("Target"); }
private readonly object path; public InvokeExtension(object path,
private readonly List<object?> parameters = new(); object args1)
{
this.path = path;
public InvokeExtension(object path) parameters.Add(args1 is not MarkupExtension ? args1.ToBinding() : args1);
}
public InvokeExtension(object path,
object args1,
object args2)
{
this.path = path;
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
}
public InvokeExtension(object path,
object args1,
object args2,
object args3)
{
this.path = path;
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
}
public InvokeExtension(object path,
object args1,
object args2,
object args3,
object args4)
{
this.path = path;
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
}
public InvokeExtension(object path,
object args1,
object args2,
object args3,
object args4,
object args5)
{
this.path = path;
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
}
public InvokeExtension(object path,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6)
{
this.path = path;
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
}
public InvokeExtension(object path,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7)
{
this.path = path;
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
}
public InvokeExtension(object path,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8)
{
this.path = path;
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding());
}
public InvokeExtension(object path,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9)
{
this.path = path;
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding());
parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding());
}
public InvokeExtension(object path,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9,
object args10)
{
this.path = path;
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding());
parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding());
parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding());
}
public InvokeExtension(object path,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9,
object args10,
object args11)
{
this.path = path;
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding());
parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding());
parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding());
parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding());
}
public InvokeExtension(object path,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9,
object args10,
object args11,
object args12)
{
this.path = path;
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding());
parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding());
parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding());
parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding());
parameters.Add(args12 is MarkupExtension ? args12 : args12.ToBinding());
}
public InvokeExtension(object path,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9,
object args10,
object args11,
object args12,
object args13)
{
this.path = path;
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding());
parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding());
parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding());
parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding());
parameters.Add(args12 is MarkupExtension ? args12 : args12.ToBinding());
parameters.Add(args13 is MarkupExtension ? args13 : args13.ToBinding());
}
public InvokeExtension(object path,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9,
object args10,
object args11,
object args12,
object args13,
object args14)
{
this.path = path;
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding());
parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding());
parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding());
parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding());
parameters.Add(args12 is MarkupExtension ? args12 : args12.ToBinding());
parameters.Add(args13 is MarkupExtension ? args13 : args13.ToBinding());
parameters.Add(args14 is MarkupExtension ? args14 : args14.ToBinding());
}
public InvokeExtension(object path,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9,
object args10,
object args11,
object args12,
object args13,
object args14,
object args15)
{
this.path = path;
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding());
parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding());
parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding());
parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding());
parameters.Add(args12 is MarkupExtension ? args12 : args12.ToBinding());
parameters.Add(args13 is MarkupExtension ? args13 : args13.ToBinding());
parameters.Add(args14 is MarkupExtension ? args14 : args14.ToBinding());
parameters.Add(args15 is MarkupExtension ? args15 : args15.ToBinding());
}
protected override void OnInvoked(object sender, EventArgs args)
{
if (sender is AvaloniaObject avaloniaObject)
{ {
this.path = path; CreaterHandler(avaloniaObject, args);
} }
}
public InvokeExtension(object path, private void CreaterHandler(AvaloniaObject sender, EventArgs args)
object args1) {
if (TryGetInvoke(sender, out (object? Target, MethodInfo? MethodInfo) invoker))
{ {
this.path = path; if (invoker.Target is object target)
parameters.Add(args1 is not MarkupExtension ? args1.ToBinding() : args1);
}
public InvokeExtension(object path,
object args1,
object args2)
{
this.path = path;
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
}
public InvokeExtension(object path,
object args1,
object args2,
object args3)
{
this.path = path;
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
}
public InvokeExtension(object path,
object args1,
object args2,
object args3,
object args4)
{
this.path = path;
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
}
public InvokeExtension(object path,
object args1,
object args2,
object args3,
object args4,
object args5)
{
this.path = path;
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
}
public InvokeExtension(object path,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6)
{
this.path = path;
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
}
public InvokeExtension(object path,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7)
{
this.path = path;
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
}
public InvokeExtension(object path,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8)
{
this.path = path;
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding());
}
public InvokeExtension(object path,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9)
{
this.path = path;
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding());
parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding());
}
public InvokeExtension(object path,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9,
object args10)
{
this.path = path;
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding());
parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding());
parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding());
}
public InvokeExtension(object path,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9,
object args10,
object args11)
{
this.path = path;
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding());
parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding());
parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding());
parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding());
}
public InvokeExtension(object path,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9,
object args10,
object args11,
object args12)
{
this.path = path;
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding());
parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding());
parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding());
parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding());
parameters.Add(args12 is MarkupExtension ? args12 : args12.ToBinding());
}
public InvokeExtension(object path,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9,
object args10,
object args11,
object args12,
object args13)
{
this.path = path;
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding());
parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding());
parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding());
parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding());
parameters.Add(args12 is MarkupExtension ? args12 : args12.ToBinding());
parameters.Add(args13 is MarkupExtension ? args13 : args13.ToBinding());
}
public InvokeExtension(object path,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9,
object args10,
object args11,
object args12,
object args13,
object args14)
{
this.path = path;
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding());
parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding());
parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding());
parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding());
parameters.Add(args12 is MarkupExtension ? args12 : args12.ToBinding());
parameters.Add(args13 is MarkupExtension ? args13 : args13.ToBinding());
parameters.Add(args14 is MarkupExtension ? args14 : args14.ToBinding());
}
public InvokeExtension(object path,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9,
object args10,
object args11,
object args12,
object args13,
object args14,
object args15)
{
this.path = path;
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding());
parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding());
parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding());
parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding());
parameters.Add(args12 is MarkupExtension ? args12 : args12.ToBinding());
parameters.Add(args13 is MarkupExtension ? args13 : args13.ToBinding());
parameters.Add(args14 is MarkupExtension ? args14 : args14.ToBinding());
parameters.Add(args15 is MarkupExtension ? args15 : args15.ToBinding());
}
protected override void OnInvoked(object sender, EventArgs args)
{
if (sender is AvaloniaObject avaloniaObject)
{ {
CreaterHandler(avaloniaObject, args); if (invoker.MethodInfo is MethodInfo methodInfo)
}
}
private void CreaterHandler(AvaloniaObject sender, EventArgs args)
{
if (TryGetInvoke(sender, out (object? Target, MethodInfo? MethodInfo) invoker))
{
if (invoker.Target is object target)
{ {
if (invoker.MethodInfo is MethodInfo methodInfo) ParameterInfo[] parameterInfo = methodInfo.GetParameters();
List<object> parameters = new();
foreach (object? parameter in this.parameters)
{ {
ParameterInfo[] parameterInfo = methodInfo.GetParameters(); switch (parameter)
List<object> parameters = new();
foreach (object? parameter in this.parameters)
{ {
switch (parameter) //case IParameter keyedParameter:
{ // BindingOperations.SetBinding(sender, ParameterProperty, parameter.ToBinding());
//case IParameter keyedParameter: // parameters.Add(new KeyValuePair<string, object>(keyedParameter.Key, (dynamic)sender.GetValue(ParameterProperty)));
// BindingOperations.SetBinding(sender, ParameterProperty, parameter.ToBinding()); // break;
// parameters.Add(new KeyValuePair<string, object>(keyedParameter.Key, (dynamic)sender.GetValue(ParameterProperty))); //case IEventParameter eventParameter:
// break; // parameters.AddRange(eventParameter.GetParameters(args));
//case IEventParameter eventParameter: // break;
// parameters.AddRange(eventParameter.GetParameters(args)); //default:
// break; // BindingOperations.SetBinding(sender, ParameterProperty, parameter.ToBinding());
//default: // parameters.Add((dynamic)sender.GetValue(ParameterProperty));
// BindingOperations.SetBinding(sender, ParameterProperty, parameter.ToBinding()); // break;
// parameters.Add((dynamic)sender.GetValue(ParameterProperty));
// break;
}
} }
methodInfo.Invoke(target, parameters.Any() ? parameters.ToArray() : parameterInfo.Length > 0 ? new object?[] { null } : Array.Empty<object>());
} }
methodInfo.Invoke(target, parameters.Any() ? parameters.ToArray() : parameterInfo.Length > 0 ? new object?[] { null } : Array.Empty<object>());
} }
} }
} }
}
private bool TryGetInvoke(AvaloniaObject sender, [AllowNull] out (object?, MethodInfo?) invoker) private bool TryGetInvoke(AvaloniaObject sender, [AllowNull] out (object?, MethodInfo?) invoker)
{
if (path is Binding binding)
{ {
if (path is Binding binding) sender.Bind(TargetProperty, binding);
if (sender.GetValue(TargetProperty) is Action action)
{ {
sender.Bind(TargetProperty, binding); invoker = new(action.Target, action.Method);
if (sender.GetValue(TargetProperty) is Action action) return true;
}
}
if (path is string name)
{
if (sender.GetValue(StyledElement.DataContextProperty) is object dataContext)
{
if (dataContext.GetType().GetMethod(name, BindingFlags.Public | BindingFlags.Instance) is MethodInfo methodInfo)
{ {
invoker = new(action.Target, action.Method); invoker = new(dataContext, methodInfo);
return true; return true;
} }
} }
if (path is string name)
{
if (sender.GetValue(StyledElement.DataContextProperty) is object dataContext)
{
if (dataContext.GetType().GetMethod(name, BindingFlags.Public | BindingFlags.Instance) is MethodInfo methodInfo)
{
invoker = new(dataContext, methodInfo);
return true;
}
}
}
invoker = default;
return false;
} }
invoker = default;
return false;
} }
} }
+446 -446
View File
@@ -3,482 +3,482 @@ using Avalonia.Controls;
using Avalonia.Data; using Avalonia.Data;
using Avalonia.Markup.Xaml; using Avalonia.Markup.Xaml;
using Mediator; using Mediator;
using Toolkit.Framework.Foundation;
namespace Toolkit.Foundation.Avalonia namespace Toolkit.Foundation.Avalonia;
public class NavigateExtension : TriggerExtension
{ {
public class NavigateExtension : TriggerExtension private static readonly AttachedProperty<IMediator> MediatorProperty =
AvaloniaProperty.RegisterAttached<NavigateExtension, Control, IMediator>("Mediator");
private static readonly AttachedProperty<object> ParameterProperty =
AvaloniaProperty.RegisterAttached<NavigateExtension, Control, object>("Parameter");
private static readonly AvaloniaProperty RouteProperty =
AvaloniaProperty.RegisterAttached<NavigateExtension, Control, object>("Route");
private static readonly AvaloniaProperty ToProperty =
AvaloniaProperty.RegisterAttached<NavigateExtension, Control, object>("To");
private readonly Binding? mediatorBinding;
private readonly List<object?> parameters = new();
private readonly Binding? toBinding;
private object? route;
private Binding? routeBinding;
public NavigateExtension(object mediator,
object to)
{ {
private static readonly AttachedProperty<IMediator> MediatorProperty = mediatorBinding = mediator.ToBinding();
AvaloniaProperty.RegisterAttached<NavigateExtension, Control, IMediator>("Mediator"); this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding();
}
private static readonly AttachedProperty<object> ParameterProperty = public NavigateExtension(object mediator,
AvaloniaProperty.RegisterAttached<NavigateExtension, Control, object>("Parameter"); object to,
object args1)
{
mediatorBinding = mediator.ToBinding();
this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding();
private static readonly AvaloniaProperty RouteProperty = parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
AvaloniaProperty.RegisterAttached<NavigateExtension, Control, object>("Route"); }
private static readonly AvaloniaProperty ToProperty = public NavigateExtension(object mediator,
AvaloniaProperty.RegisterAttached<NavigateExtension, Control, object>("To"); object to,
object args1,
object args2)
{
mediatorBinding = mediator.ToBinding();
this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding();
private readonly Binding? mediatorBinding; parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
private readonly List<object?> parameters = new(); parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
private readonly Binding? toBinding; }
private object? route;
private Binding? routeBinding;
public NavigateExtension(object mediator, public NavigateExtension(object mediator,
object to) object to,
object args1,
object args2,
object args3)
{
mediatorBinding = mediator.ToBinding();
this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding();
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
}
public NavigateExtension(object mediator,
object to,
object args1,
object args2,
object args3,
object args4)
{
mediatorBinding = mediator.ToBinding();
this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding();
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
}
public NavigateExtension(object mediator,
object to,
object args1,
object args2,
object args3,
object args4,
object args5)
{
mediatorBinding = mediator.ToBinding();
this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding();
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
}
public NavigateExtension(object mediator,
object to,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6)
{
mediatorBinding = mediator.ToBinding();
this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding();
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
}
public NavigateExtension(object mediator,
object to,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7)
{
mediatorBinding = mediator.ToBinding();
this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding();
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
}
public NavigateExtension(object mediator,
object to,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8)
{
mediatorBinding = mediator.ToBinding();
this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding();
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding());
}
public NavigateExtension(object mediator,
object to,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9)
{
mediatorBinding = mediator.ToBinding();
this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding();
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding());
parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding());
}
public NavigateExtension(object mediator,
object to,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9,
object args10)
{
mediatorBinding = mediator.ToBinding();
this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding();
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding());
parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding());
parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding());
}
public NavigateExtension(object mediator,
object to,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9,
object args10,
object args11)
{
mediatorBinding = mediator.ToBinding();
this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding();
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding());
parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding());
parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding());
parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding());
}
public NavigateExtension(object mediator,
object to,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9,
object args10,
object args11,
object args12)
{
mediatorBinding = mediator.ToBinding();
this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding();
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding());
parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding());
parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding());
parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding());
parameters.Add(args12 is MarkupExtension ? args12 : args12.ToBinding());
}
public NavigateExtension(object mediator,
object to,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9,
object args10,
object args11,
object args12,
object args13)
{
mediatorBinding = mediator.ToBinding();
this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding();
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding());
parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding());
parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding());
parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding());
parameters.Add(args12 is MarkupExtension ? args12 : args12.ToBinding());
parameters.Add(args13 is MarkupExtension ? args13 : args13.ToBinding());
}
public NavigateExtension(object mediator,
object to,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9,
object args10,
object args11,
object args12,
object args13,
object args14)
{
mediatorBinding = mediator.ToBinding();
this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding();
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding());
parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding());
parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding());
parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding());
parameters.Add(args12 is MarkupExtension ? args12 : args12.ToBinding());
parameters.Add(args13 is MarkupExtension ? args13 : args13.ToBinding());
parameters.Add(args14 is MarkupExtension ? args14 : args14.ToBinding());
}
public NavigateExtension(object mediator,
object to,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9,
object args10,
object args11,
object args12,
object args13,
object args14,
object args15)
{
mediatorBinding = mediator.ToBinding();
this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding();
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding());
parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding());
parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding());
parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding());
parameters.Add(args12 is MarkupExtension ? args12 : args12.ToBinding());
parameters.Add(args13 is MarkupExtension ? args13 : args13.ToBinding());
parameters.Add(args14 is MarkupExtension ? args14 : args14.ToBinding());
parameters.Add(args15 is MarkupExtension ? args15 : args15.ToBinding());
}
public object? Route
{
get
{ {
mediatorBinding = mediator.ToBinding(); return route;
this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding();
} }
set
public NavigateExtension(object mediator,
object to,
object args1)
{ {
mediatorBinding = mediator.ToBinding(); route = value;
this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding(); if (route is not null)
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
}
public NavigateExtension(object mediator,
object to,
object args1,
object args2)
{
mediatorBinding = mediator.ToBinding();
this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding();
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
}
public NavigateExtension(object mediator,
object to,
object args1,
object args2,
object args3)
{
mediatorBinding = mediator.ToBinding();
this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding();
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
}
public NavigateExtension(object mediator,
object to,
object args1,
object args2,
object args3,
object args4)
{
mediatorBinding = mediator.ToBinding();
this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding();
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
}
public NavigateExtension(object mediator,
object to,
object args1,
object args2,
object args3,
object args4,
object args5)
{
mediatorBinding = mediator.ToBinding();
this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding();
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
}
public NavigateExtension(object mediator,
object to,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6)
{
mediatorBinding = mediator.ToBinding();
this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding();
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
}
public NavigateExtension(object mediator,
object to,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7)
{
mediatorBinding = mediator.ToBinding();
this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding();
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
}
public NavigateExtension(object mediator,
object to,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8)
{
mediatorBinding = mediator.ToBinding();
this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding();
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding());
}
public NavigateExtension(object mediator,
object to,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9)
{
mediatorBinding = mediator.ToBinding();
this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding();
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding());
parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding());
}
public NavigateExtension(object mediator,
object to,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9,
object args10)
{
mediatorBinding = mediator.ToBinding();
this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding();
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding());
parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding());
parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding());
}
public NavigateExtension(object mediator,
object to,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9,
object args10,
object args11)
{
mediatorBinding = mediator.ToBinding();
this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding();
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding());
parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding());
parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding());
parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding());
}
public NavigateExtension(object mediator,
object to,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9,
object args10,
object args11,
object args12)
{
mediatorBinding = mediator.ToBinding();
this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding();
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding());
parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding());
parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding());
parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding());
parameters.Add(args12 is MarkupExtension ? args12 : args12.ToBinding());
}
public NavigateExtension(object mediator,
object to,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9,
object args10,
object args11,
object args12,
object args13)
{
mediatorBinding = mediator.ToBinding();
this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding();
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding());
parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding());
parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding());
parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding());
parameters.Add(args12 is MarkupExtension ? args12 : args12.ToBinding());
parameters.Add(args13 is MarkupExtension ? args13 : args13.ToBinding());
}
public NavigateExtension(object mediator,
object to,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9,
object args10,
object args11,
object args12,
object args13,
object args14)
{
mediatorBinding = mediator.ToBinding();
this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding();
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding());
parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding());
parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding());
parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding());
parameters.Add(args12 is MarkupExtension ? args12 : args12.ToBinding());
parameters.Add(args13 is MarkupExtension ? args13 : args13.ToBinding());
parameters.Add(args14 is MarkupExtension ? args14 : args14.ToBinding());
}
public NavigateExtension(object mediator,
object to,
object args1,
object args2,
object args3,
object args4,
object args5,
object args6,
object args7,
object args8,
object args9,
object args10,
object args11,
object args12,
object args13,
object args14,
object args15)
{
mediatorBinding = mediator.ToBinding();
this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding();
parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding());
parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding());
parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding());
parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding());
parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding());
parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding());
parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding());
parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding());
parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding());
parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding());
parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding());
parameters.Add(args12 is MarkupExtension ? args12 : args12.ToBinding());
parameters.Add(args13 is MarkupExtension ? args13 : args13.ToBinding());
parameters.Add(args14 is MarkupExtension ? args14 : args14.ToBinding());
parameters.Add(args15 is MarkupExtension ? args15 : args15.ToBinding());
}
public object? Route
{
get
{ {
return route; routeBinding = route.ToBinding();
} }
set
{
route = value;
if (route is not null)
{
routeBinding = route.ToBinding();
}
}
} }
protected override void OnInvoked(object sender, EventArgs args) }
protected override void OnInvoked(object sender, EventArgs args)
{
if (TargetObject is not null)
{ {
if (TargetObject is not null) if (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 (toBinding is not null)
if (TargetObject.GetValue(MediatorProperty) is IMediator mediator)
{ {
if (toBinding is not null) TargetObject.Bind(ToProperty, toBinding);
if (TargetObject.GetValue(ToProperty) is { } to)
{ {
TargetObject.Bind(ToProperty, toBinding); List<object>? parameters = new();
if (TargetObject.GetValue(ToProperty) is { } to) foreach (object? parameter in this.parameters)
{ {
List<object>? parameters = new(); if (parameter is not null)
foreach (object? parameter in this.parameters)
{ {
if (parameter is not null) switch (parameter)
{ {
switch (parameter) case IParameter keyedParameter:
{ if (keyedParameter.GetValue(TargetObject) is KeyValuePair<string, object> keyValuePair)
case IParameter keyedParameter: {
if (keyedParameter.GetValue(TargetObject) is KeyValuePair<string, object> keyValuePair) parameters.Add(keyValuePair);
{ }
parameters.Add(keyValuePair); break;
} case IEventParameter eventParameter:
break; parameters.AddRange(eventParameter.GetValues(args));
case IEventParameter eventParameter: break;
parameters.AddRange(eventParameter.GetValues(args)); default:
break; if (parameter.ToBinding() is Binding defaultDinding)
default: {
if (parameter.ToBinding() is Binding defaultDinding) TargetObject.Bind(ParameterProperty, defaultDinding);
{ parameters.Add((dynamic)TargetObject.GetValue(ParameterProperty));
TargetObject.Bind(ParameterProperty, defaultDinding); }
parameters.Add((dynamic)TargetObject.GetValue(ParameterProperty)); break;
}
break;
}
} }
} }
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)
{
name = string.Format(format, name);
}
mediator.Send(new Navigate(name, parameters.ToArray()) { Route = route });
}
if (to is Type type)
{
mediator.Send(new Navigate(type, parameters.ToArray()) { Route = route });
}
} }
}
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)
{
name = string.Format(format, name);
}
mediator.Send(new Navigate(name, 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);
} }
} }
} }
@@ -5,91 +5,91 @@ using Avalonia.Data;
using Avalonia.Interactivity; using Avalonia.Interactivity;
using Avalonia.Markup.Xaml; using Avalonia.Markup.Xaml;
using Mediator; 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 = mediatorBinding = mediator is Binding toBinding ? toBinding : mediator.ToBinding();
AvaloniaProperty.RegisterAttached<NavigationRouteExtension, Control, IMediator>("Mediator"); this.name = name;
}
private readonly string name; private bool TryGetBinding(AvaloniaObject sender, out object? binding)
private readonly Binding? mediatorBinding; {
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(); if (target.TargetObject is TemplatedControl control)
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 (!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))
{
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)
{ {
control.Loaded -= HandleLoaded; 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); mediator.Send(new NavigationRoute(name, control));
if (control.GetValue(MediatorProperty) is IMediator mediator) 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 (mediatorBinding is not null)
if (control.GetValue(MediatorProperty) is IMediator mediator)
{ {
mediator.Send(new NavigationRoute(name, control)); control.Bind(MediatorProperty, mediatorBinding);
control.ClearValue(MediatorProperty); 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;
} }
} }
@@ -1,42 +1,42 @@
using Avalonia.Controls; using Avalonia;
using Avalonia; using Avalonia.Controls;
using Avalonia.Data; using Avalonia.Data;
using Avalonia.Markup.Xaml; using Avalonia.Markup.Xaml;
using Toolkit.Framework.Foundation;
namespace Toolkit.Foundation.Avalonia namespace Toolkit.Foundation.Avalonia;
public class ParameterBindingExtension : MarkupExtension, IParameter
{ {
public class ParameterBindingExtension : MarkupExtension, IParameter private static readonly AttachedProperty<object> ValueProperty =
AvaloniaProperty.RegisterAttached<ParameterBindingExtension, Control, object>("Value");
private readonly Binding? valueBinding;
public ParameterBindingExtension(string key, object value)
{ {
private static readonly AttachedProperty<object> ValueProperty = Key = key;
AvaloniaProperty.RegisterAttached<ParameterBindingExtension, Control, object>("Value"); valueBinding = value.ToBinding();
}
private readonly Binding? valueBinding; public string? Key { get; }
public ParameterBindingExtension(string key, object value) public KeyValuePair<string, object>? GetValue(object target)
{
if (target is AvaloniaObject avaloniaObject)
{ {
Key = key; if (valueBinding is not null)
valueBinding = value.ToBinding();
}
public string? Key { get; }
public KeyValuePair<string, object>? GetValue(object target)
{
if (target is AvaloniaObject avaloniaObject)
{ {
if (valueBinding is not null) avaloniaObject.Bind(ValueProperty, valueBinding);
{ return new KeyValuePair<string, object>(Key, (dynamic)avaloniaObject.GetValue(ValueProperty));
avaloniaObject.Bind(ValueProperty, valueBinding);
return new KeyValuePair<string, object>(Key, (dynamic)avaloniaObject.GetValue(ValueProperty));
}
} }
return default;
} }
public override object ProvideValue(IServiceProvider serviceProvider) return default;
{ }
return this;
} public override object ProvideValue(IServiceProvider serviceProvider)
{
return this;
} }
} }
@@ -1,15 +1,14 @@
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
namespace Toolkit.Foundation.Avalonia namespace Toolkit.Foundation.Avalonia;
public class TriggerCollection : Collection<Delegate>
{ {
public class TriggerCollection : Collection<Delegate> public void Add(object item)
{ {
public void Add(object item) if (item is Delegate trigger)
{ {
if (item is Delegate trigger) base.Add(trigger);
{
base.Add(trigger);
}
} }
} }
} }
+48 -52
View File
@@ -1,76 +1,72 @@
using Avalonia; using Avalonia;
using Avalonia.Markup.Xaml; using Avalonia.Markup.Xaml;
using System;
using System.Reflection; using System.Reflection;
namespace Toolkit.Foundation.Avalonia namespace Toolkit.Foundation.Avalonia;
public class TriggerExtension : MarkupExtension
{ {
public class TriggerExtension : MarkupExtension public AvaloniaObject? TargetObject { get; protected set; }
protected object? TargetInvoke { get; private set; }
public void Invoke(object sender, EventArgs args)
{ {
public AvaloniaObject? TargetObject { get; protected set; } OnInvoked(sender, args);
}
protected object? TargetInvoke { get; private set; } public override object? ProvideValue(IServiceProvider serviceProvider)
{
public void Invoke(object sender, EventArgs args) if (serviceProvider.GetService(typeof(IProvideValueTarget)) is IProvideValueTarget target)
{ {
OnInvoked(sender, args); if (target.TargetObject is AvaloniaObject avaloniaObject)
}
public override object? ProvideValue(IServiceProvider serviceProvider)
{
if (serviceProvider.GetService(typeof(IProvideValueTarget)) is IProvideValueTarget target)
{ {
if (target.TargetObject is AvaloniaObject avaloniaObject) TargetObject = avaloniaObject;
}
else if (serviceProvider.GetService(typeof(IRootObjectProvider)) is IRootObjectProvider root)
{
TargetObject = (AvaloniaObject)root.RootObject;
}
if (TargetObject is not null)
{
string? targetName = target.TargetProperty as string;
TargetInvoke = target.TargetProperty;
OnAttached(serviceProvider);
EventInfo? eventInfo = target.TargetProperty as EventInfo ?? (targetName is not null ? TargetObject.GetType().GetEvent(targetName) : null);
MethodInfo? methodInfo = eventInfo is not null ? null : target.TargetProperty as MethodInfo ?? (targetName is not null ? TargetObject.GetType().GetMethod(targetName) : null);
MethodInfo invokeMethod = GetType().GetMethod("Invoke", BindingFlags.Instance | BindingFlags.Public)!;
if (invokeMethod is null)
{ {
TargetObject = avaloniaObject; return this;
}
else if (serviceProvider.GetService(typeof(IRootObjectProvider)) is IRootObjectProvider root)
{
TargetObject = (AvaloniaObject)root.RootObject;
} }
if (TargetObject is not null) if (eventInfo is not null)
{ {
string? targetName = target.TargetProperty as string; return Delegate.CreateDelegate(eventInfo.EventHandlerType!, this, invokeMethod);
}
TargetInvoke = target.TargetProperty; if (methodInfo is not null)
OnAttached(serviceProvider); {
if (methodInfo.GetParameters() is ParameterInfo[] methodParameters && methodParameters is { Length: 2 })
EventInfo? eventInfo = target.TargetProperty as EventInfo ?? (targetName is not null ? TargetObject.GetType().GetEvent(targetName) : null);
MethodInfo? methodInfo = eventInfo is not null ? null : target.TargetProperty as MethodInfo ?? (targetName is not null ? TargetObject.GetType().GetMethod(targetName) : null);
MethodInfo invokeMethod = GetType().GetMethod("Invoke", BindingFlags.Instance | BindingFlags.Public)!;
if (invokeMethod is null)
{ {
return this; return Delegate.CreateDelegate(methodParameters[1].ParameterType, this, invokeMethod);
}
if (eventInfo is not null)
{
return Delegate.CreateDelegate(eventInfo.EventHandlerType!, this, invokeMethod);
}
if (methodInfo is not null)
{
if (methodInfo.GetParameters() is ParameterInfo[] methodParameters && methodParameters is { Length: 2 })
{
return Delegate.CreateDelegate(methodParameters[1].ParameterType, this, invokeMethod);
}
} }
} }
} }
return null;
} }
protected virtual void OnAttached(IServiceProvider serviceProvider) return null;
{ }
} protected virtual void OnAttached(IServiceProvider serviceProvider)
{
}
protected virtual void OnInvoked(object sender, EventArgs args) protected virtual void OnInvoked(object sender, EventArgs args)
{ {
}
} }
} }
@@ -1,14 +1,13 @@
using Avalonia.Controls; using Avalonia.Controls;
namespace Toolkit.Foundation.Avalonia namespace Toolkit.Foundation.Avalonia;
public record ContentControlNavigation : Navigation<ContentControl>
{ {
public record ContentControlNavigation : Navigation<ContentControl> public ContentControlNavigation(ContentControl route,
object? content,
object? template,
IDictionary<string, object>? parameters) : base(route, content, template, parameters)
{ {
public ContentControlNavigation(ContentControl route,
object? content,
object? template,
IDictionary<string, object>? parameters) : base(route, content, template, parameters)
{
}
} }
} }
@@ -1,19 +1,18 @@
using Avalonia.Controls.Primitives; using Avalonia.Controls.Primitives;
using Mediator; using Mediator;
namespace Toolkit.Foundation.Avalonia namespace Toolkit.Foundation.Avalonia;
{
public class ContentControlNavigationHandler : IRequestHandler<ContentControlNavigation, bool>
{
public async ValueTask<bool> Handle(ContentControlNavigation request, CancellationToken cancellationToken)
{
if (request.Template is TemplatedControl control)
{
control.DataContext = request.Content;
request.Route.Content = control;
}
return await Task.FromResult(true); public class ContentControlNavigationHandler : IRequestHandler<ContentControlNavigation, bool>
{
public async ValueTask<bool> Handle(ContentControlNavigation request, CancellationToken cancellationToken)
{
if (request.Template is TemplatedControl control)
{
control.DataContext = request.Content;
request.Route.Content = control;
} }
return await Task.FromResult(true);
} }
} }
@@ -1,15 +1,13 @@
using FluentAvalonia.UI.Controls; using FluentAvalonia.UI.Controls;
namespace Toolkit.Foundation.Avalonia namespace Toolkit.Foundation.Avalonia;
{
public record ContentDialogNavigation : Navigation<ContentDialog>
{
public ContentDialogNavigation(ContentDialog route,
object? content,
object? template,
IDictionary<string, object>? parameters) : base(route, content, template, parameters)
{
} public record ContentDialogNavigation : Navigation<ContentDialog>
{
public ContentDialogNavigation(ContentDialog route,
object? content,
object? template,
IDictionary<string, object>? parameters) : base(route, content, template, parameters)
{
} }
} }
@@ -1,44 +1,43 @@
using FluentAvalonia.UI.Controls; using FluentAvalonia.UI.Controls;
using Mediator; using Mediator;
namespace Toolkit.Foundation.Avalonia namespace Toolkit.Foundation.Avalonia;
public class ContentDialogNavigationHandler : IRequestHandler<ContentDialogNavigation, bool>
{ {
public class ContentDialogNavigationHandler : IRequestHandler<ContentDialogNavigation, bool> public async ValueTask<bool> Handle(ContentDialogNavigation request, CancellationToken cancellationToken)
{ {
public async ValueTask<bool> Handle(ContentDialogNavigation request, CancellationToken cancellationToken) if (request.Template is ContentDialog contentDialog)
{ {
if (request.Template is ContentDialog contentDialog) async void HandleButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args)
{ {
async void HandleButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args) ContentDialogButtonClickDeferral defferal = args.GetDeferral();
if (sender.DataContext is INavigationConfirmation confirmation)
{ {
ContentDialogButtonClickDeferral defferal = args.GetDeferral(); if (!await confirmation.CanConfirm())
if (sender.DataContext is INavigationConfirmation confirmation)
{ {
if (!await confirmation.CanConfirm()) args.Cancel = true;
{
args.Cancel = true;
}
} }
if (!args.Cancel)
{
contentDialog.SecondaryButtonClick -= HandleButtonClick;
contentDialog.PrimaryButtonClick -= HandleButtonClick;
contentDialog.CloseButtonClick -= HandleButtonClick;
}
defferal.Complete();
} }
contentDialog.SecondaryButtonClick += HandleButtonClick; if (!args.Cancel)
contentDialog.PrimaryButtonClick += HandleButtonClick; {
contentDialog.CloseButtonClick += HandleButtonClick; contentDialog.SecondaryButtonClick -= HandleButtonClick;
contentDialog.PrimaryButtonClick -= HandleButtonClick;
contentDialog.CloseButtonClick -= HandleButtonClick;
}
contentDialog.DataContext = request.Content; defferal.Complete();
await contentDialog.ShowAsync();
} }
return await Task.FromResult(true); contentDialog.SecondaryButtonClick += HandleButtonClick;
contentDialog.PrimaryButtonClick += HandleButtonClick;
contentDialog.CloseButtonClick += HandleButtonClick;
contentDialog.DataContext = request.Content;
await contentDialog.ShowAsync();
} }
return await Task.FromResult(true);
} }
} }
@@ -1,15 +1,14 @@
using FluentAvalonia.UI.Controls; using FluentAvalonia.UI.Controls;
namespace Toolkit.Foundation.Avalonia namespace Toolkit.Foundation.Avalonia;
public record FrameNavigation : Navigation<Frame>
{ {
public record FrameNavigation : Navigation<Frame> public FrameNavigation(Frame route,
object? content,
object? template,
IDictionary<string, object>?
parameters) : base(route, content, template, parameters)
{ {
public FrameNavigation(Frame route,
object? content,
object? template,
IDictionary<string, object>?
parameters) : base(route, content, template, parameters)
{
}
} }
} }
@@ -2,32 +2,31 @@
using FluentAvalonia.UI.Navigation; using FluentAvalonia.UI.Navigation;
using Mediator; using Mediator;
namespace Toolkit.Foundation.Avalonia namespace Toolkit.Foundation.Avalonia;
public class FrameNavigationHandler : IRequestHandler<FrameNavigation, bool>
{ {
public class FrameNavigationHandler : IRequestHandler<FrameNavigation, bool> public async ValueTask<bool> Handle(FrameNavigation request, CancellationToken cancellationToken)
{ {
public async ValueTask<bool> Handle(FrameNavigation request, CancellationToken cancellationToken) request.Route.NavigationPageFactory = new NavigationPageFactory();
TaskCompletionSource<bool> completionSource = new();
if (request.Template is TemplatedControl content)
{ {
request.Route.NavigationPageFactory = new NavigationPageFactory(); void HandleNavigated(object sender, NavigationEventArgs args)
TaskCompletionSource<bool> completionSource = new();
if (request.Template is TemplatedControl content)
{ {
void HandleNavigated(object sender, NavigationEventArgs args) request.Route.Navigated -= HandleNavigated;
if (request.Route.Content is TemplatedControl control)
{ {
request.Route.Navigated -= HandleNavigated; control.DataContext = request.Content;
if (request.Route.Content is TemplatedControl control) completionSource.SetResult(true);
{
control.DataContext = request.Content;
completionSource.SetResult(true);
}
} }
request.Route.Navigated += HandleNavigated;
request.Route.NavigateFromObject(content);
} }
return await completionSource.Task; request.Route.Navigated += HandleNavigated;
request.Route.NavigateFromObject(content);
} }
return await completionSource.Task;
} }
} }
@@ -2,37 +2,37 @@
using Avalonia.Controls.Primitives; using Avalonia.Controls.Primitives;
using FluentAvalonia.UI.Controls; using FluentAvalonia.UI.Controls;
using Mediator; using Mediator;
using Toolkit.Framework.Foundation;
namespace Toolkit.Foundation.Avalonia namespace Toolkit.Foundation.Avalonia;
public class NavigateBackHandler : IRequestHandler<NavigateBack>
{ {
public class NavigateBackHandler : IRequestHandler<NavigateBack> private readonly INavigationRouteDescriptorCollection descriptors;
public NavigateBackHandler(INavigationRouteDescriptorCollection descriptors)
{ {
private readonly INavigationRouteDescriptorCollection descriptors; this.descriptors = descriptors;
}
public NavigateBackHandler(INavigationRouteDescriptorCollection descriptors) public ValueTask<Unit> Handle(NavigateBack request, CancellationToken cancellationToken)
{
if (descriptors.FirstOrDefault(x => request.Route is string { } name && name == x.Name) is NavigationRouteDescriptor descriptor)
{ {
this.descriptors = descriptors; if (descriptor.Route is ContentControl { Content: TemplatedControl content })
}
public ValueTask<Unit> Handle(NavigateBack request, CancellationToken cancellationToken)
{
if (descriptors.FirstOrDefault(x => request.Route is string { } name && name == x.Name) is NavigationRouteDescriptor descriptor)
{ {
if (descriptor.Route is ContentControl { Content: TemplatedControl content }) if (content.DataContext is IDisposable disposable)
{ {
if (content.DataContext is IDisposable disposable) disposable.Dispose();
{
disposable.Dispose();
}
}
if (descriptor.Route is Frame frame)
{
frame.GoBack();
} }
} }
return default; if (descriptor.Route is Frame frame)
{
frame.GoBack();
}
} }
return default;
} }
} }
@@ -1,116 +1,116 @@
using Avalonia.Controls; using Avalonia.Controls;
using FluentAvalonia.UI.Controls; using FluentAvalonia.UI.Controls;
using Mediator; using Mediator;
using Toolkit.Framework.Foundation;
namespace Toolkit.Foundation.Avalonia namespace Toolkit.Foundation.Avalonia;
public class NavigateHandler : IRequestHandler<Navigate>
{ {
public class NavigateHandler : IRequestHandler<Navigate> private readonly INavigationRouteDescriptorCollection descriptors;
private readonly IMediator mediator;
private readonly INamedDataTemplateFactory namedDataTemplateFactory;
private readonly INamedTemplateFactory namedTemplateFactory;
private readonly ITemplateFactory templateFactory;
private readonly ITypedDataTemplateFactory typedDataTemplateFactory;
public NavigateHandler(IMediator mediator,
ITemplateFactory templateFactory,
INamedTemplateFactory namedTemplateFactory,
INamedDataTemplateFactory namedDataTemplateFactory,
ITypedDataTemplateFactory typedDataTemplateFactory,
INavigationRouteDescriptorCollection descriptors)
{ {
private readonly INavigationRouteDescriptorCollection descriptors; this.mediator = mediator;
private readonly IMediator mediator; this.templateFactory = templateFactory;
private readonly INamedDataTemplateFactory namedDataTemplateFactory; this.namedTemplateFactory = namedTemplateFactory;
private readonly INamedTemplateFactory namedTemplateFactory; this.namedDataTemplateFactory = namedDataTemplateFactory;
private readonly ITemplateFactory templateFactory; this.typedDataTemplateFactory = typedDataTemplateFactory;
private readonly ITypedDataTemplateFactory typedDataTemplateFactory; this.descriptors = descriptors;
}
public NavigateHandler(IMediator mediator, public async ValueTask<Unit> Handle(Navigate request, CancellationToken cancellationToken)
ITemplateFactory templateFactory, {
INamedTemplateFactory namedTemplateFactory, object? content = null;
INamedDataTemplateFactory namedDataTemplateFactory, object? template = null;
ITypedDataTemplateFactory typedDataTemplateFactory,
INavigationRouteDescriptorCollection descriptors) Dictionary<string, object> keyedParameters = new();
List<object> parameters = new();
foreach (object? parameter in request.Parameters)
{ {
this.mediator = mediator; if (parameter is not null)
this.templateFactory = templateFactory;
this.namedTemplateFactory = namedTemplateFactory;
this.namedDataTemplateFactory = namedDataTemplateFactory;
this.typedDataTemplateFactory = typedDataTemplateFactory;
this.descriptors = descriptors;
}
public async ValueTask<Unit> Handle(Navigate request, CancellationToken cancellationToken)
{
object? content = null;
object? template = null;
Dictionary<string, object> keyedParameters = new();
List<object> parameters = new();
foreach (object? parameter in request.Parameters)
{ {
if (parameter is not null) if (parameter is KeyValuePair<string, object> keyed)
{ {
if (parameter is KeyValuePair<string, object> keyed) keyedParameters.Add(keyed.Key, keyed.Value);
{
keyedParameters.Add(keyed.Key, keyed.Value);
}
else
{
parameters.Add(parameter);
}
}
}
if (request.Name is { Length: > 0 } name)
{
content = namedDataTemplateFactory.Create(name, parameters.ToArray());
template = namedTemplateFactory.Create(name);
}
if (request.Type is Type type)
{
content = typedDataTemplateFactory.Create(type, parameters.ToArray());
template = templateFactory.Create(content);
}
if (template is not null)
{
object? target = null;
if (descriptors.FirstOrDefault(x => request.Route is string { } name && name == x.Name) is NavigationRouteDescriptor descriptor)
{
target = descriptor.Route;
} }
else else
{ {
target = template; parameters.Add(parameter);
} }
}
}
bool hasNavigated = false; if (request.Name is { Length: > 0 } name)
if (target is Frame frame) {
{ content = namedDataTemplateFactory.Create(name, parameters.ToArray());
hasNavigated = await mediator.Send(new FrameNavigation(frame, content, template, keyedParameters)); template = namedTemplateFactory.Create(name);
} }
if (target is ContentDialog dialog) if (request.Type is Type type)
{ {
hasNavigated = await mediator.Send(new ContentDialogNavigation(dialog, content, template, keyedParameters)); content = typedDataTemplateFactory.Create(type, parameters.ToArray());
} template = templateFactory.Create(content);
}
if (target is ContentControl contentControl) if (template is not null)
{ {
hasNavigated = await mediator.Send(new ContentControlNavigation(contentControl, content, template, keyedParameters)); object? target = null;
} if (descriptors.FirstOrDefault(x => request.Route is string { } name && name == x.Name) is NavigationRouteDescriptor descriptor)
{
if (hasNavigated) target = descriptor.Route;
{
if (content is INavigated navigated)
{
await navigated.Navigated();
}
}
} }
else else
{ {
if (descriptors.FirstOrDefault(x => request.Route is string { } name && name == x.Name) is NavigationRouteDescriptor descriptor) target = template;
{
if (descriptor.Route is ContentControl contentControl)
{
contentControl.Content = null;
}
}
} }
return default; bool hasNavigated = false;
if (target is Frame frame)
{
hasNavigated = await mediator.Send(new FrameNavigation(frame, content, template, keyedParameters));
}
if (target is ContentDialog dialog)
{
hasNavigated = await mediator.Send(new ContentDialogNavigation(dialog, content, template, keyedParameters));
}
if (target is ContentControl contentControl)
{
hasNavigated = await mediator.Send(new ContentControlNavigation(contentControl, content, template, keyedParameters));
}
if (hasNavigated)
{
if (content is INavigated navigated)
{
await navigated.Navigated();
}
}
} }
else
{
if (descriptors.FirstOrDefault(x => request.Route is string { } name && name == x.Name) is NavigationRouteDescriptor descriptor)
{
if (descriptor.Route is ContentControl contentControl)
{
contentControl.Content = null;
}
}
}
return default;
} }
} }
+19 -20
View File
@@ -1,27 +1,26 @@
using Avalonia.Controls.Primitives; using Avalonia.Controls.Primitives;
using Mediator; using Mediator;
namespace Toolkit.Foundation.Avalonia namespace Toolkit.Foundation.Avalonia;
public record Navigation<TRoute> : IRequest<bool> where TRoute : TemplatedControl
{ {
public record Navigation<TRoute> : IRequest<bool> where TRoute : TemplatedControl public TRoute Route { get; }
public Navigation(TRoute route,
object? content,
object? template,
IDictionary<string, object>? parameters)
{ {
public TRoute Route { get; } Route = route;
Content = content;
public Navigation(TRoute route, Template = template;
object? content, Parameters = parameters;
object? template,
IDictionary<string, object>? parameters)
{
Route = route;
Content = content;
Template = template;
Parameters = parameters;
}
public object? Content { get; }
public object? Template { get; }
public IDictionary<string, object>? Parameters { get; }
} }
public object? Content { get; }
public object? Template { get; }
public IDictionary<string, object>? Parameters { get; }
} }
@@ -1,18 +1,17 @@
using FluentAvalonia.UI.Controls; using FluentAvalonia.UI.Controls;
using Avalonia.Controls; using Avalonia.Controls;
namespace Toolkit.Foundation.Avalonia namespace Toolkit.Foundation.Avalonia;
{
internal class NavigationPageFactory : INavigationPageFactory
{
public IControl? GetPage(Type srcType)
{
return default;
}
public IControl GetPageFromObject(object target) internal class NavigationPageFactory : INavigationPageFactory
{ {
return (IControl)target; public IControl? GetPage(Type srcType)
} {
return default;
}
public IControl GetPageFromObject(object target)
{
return (IControl)target;
} }
} }
@@ -1,39 +1,39 @@
using Avalonia.Controls.Primitives; using Avalonia.Controls.Primitives;
using Avalonia.Interactivity; using Avalonia.Interactivity;
using Mediator; using Mediator;
using Toolkit.Framework.Foundation;
namespace Toolkit.Foundation.Avalonia namespace Toolkit.Foundation.Avalonia;
public class NavigationRouteHandler : IRequestHandler<NavigationRoute>
{ {
public class NavigationRouteHandler : IRequestHandler<NavigationRoute> private readonly INavigationRouteDescriptorCollection descriptors;
public NavigationRouteHandler(INavigationRouteDescriptorCollection descriptors)
{ {
private readonly INavigationRouteDescriptorCollection descriptors; this.descriptors = descriptors;
}
public NavigationRouteHandler(INavigationRouteDescriptorCollection descriptors) public ValueTask<Unit> Handle(NavigationRoute request, CancellationToken cancellationToken)
{
if (request.Route is TemplatedControl control)
{ {
this.descriptors = descriptors; void HandleUnloaded(object? sender, RoutedEventArgs args)
}
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)
{ {
if (descriptors.FirstOrDefault(x => x.Route == sender) is INavigationRouteDescriptor descriptor) descriptors.Remove(descriptor);
{
descriptors.Remove(descriptor);
}
} }
control.Unloaded += HandleUnloaded;
} }
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;
} }
if (descriptors.FirstOrDefault(x => x.Name == request.Name) is INavigationRouteDescriptor descriptor)
{
descriptors.Remove(descriptor);
}
descriptors.Add(new NavigationRouteDescriptor(request.Name, request.Route));
return default;
} }
} }
@@ -1,5 +1,6 @@
using Avalonia.Controls.Templates; using Avalonia.Controls;
using Avalonia.Controls; using Avalonia.Controls.Templates;
using Toolkit.Framework.Foundation;
namespace Toolkit.Foundation.Avalonia namespace Toolkit.Foundation.Avalonia
{ {
@@ -1,3 +1,3 @@
namespace Toolkit.Foundation; namespace Toolkit.Framework.Foundation;
public record ConfigurationChanged<TConfiguration>(TConfiguration Configuration) where TConfiguration : class; public record ConfigurationChanged<TConfiguration>(TConfiguration Configuration) where TConfiguration : class;
@@ -1,6 +1,6 @@
using Mediator; using Mediator;
namespace Toolkit.Foundation; namespace Toolkit.Framework.Foundation;
public class ConfigurationInitializer<TConfiguration> : IInitializable where TConfiguration : class, new() public class ConfigurationInitializer<TConfiguration> : IInitializable where TConfiguration : class, new()
{ {
@@ -2,7 +2,7 @@
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting;
namespace Toolkit.Foundation; namespace Toolkit.Framework.Foundation;
public class ConfigurationWriter<TConfiguration> : IConfigurationWriter<TConfiguration> where TConfiguration : class, new() public class ConfigurationWriter<TConfiguration> : IConfigurationWriter<TConfiguration> where TConfiguration : class, new()
{ {
@@ -1,4 +1,4 @@
namespace Toolkit.Foundation; namespace Toolkit.Framework.Foundation;
public interface IConfigurationWriter<TConfiguration> where TConfiguration : class public interface IConfigurationWriter<TConfiguration> where TConfiguration : class
{ {
@@ -1,4 +1,4 @@
namespace Toolkit.Foundation; namespace Toolkit.Framework.Foundation;
public interface IWritableConfigurationProvider public interface IWritableConfigurationProvider
{ {
@@ -1,4 +1,4 @@
namespace Toolkit.Foundation; namespace Toolkit.Framework.Foundation;
public interface IWritableJsonConfigurationBuilder public interface IWritableJsonConfigurationBuilder
{ {
@@ -1,4 +1,4 @@
namespace Toolkit.Foundation; namespace Toolkit.Framework.Foundation;
public interface IWritableJsonConfigurationDescriptor public interface IWritableJsonConfigurationDescriptor
{ {
@@ -1,16 +1,13 @@
using Json.Patch; using Json.Patch;
using Newtonsoft.Json; using Newtonsoft.Json;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.Diagnostics.CodeAnalysis; using System.Diagnostics.CodeAnalysis;
using System.IO;
using System.Text.Json; using System.Text.Json;
using System.Text.Json.Serialization; using System.Text.Json.Serialization;
using JsonSerializer = System.Text.Json.JsonSerializer; using JsonSerializer = System.Text.Json.JsonSerializer;
namespace Toolkit.Foundation; namespace Toolkit.Framework.Foundation;
public class WritableJsonConfigurationBuilder : IWritableJsonConfigurationBuilder public class WritableJsonConfigurationBuilder : IWritableJsonConfigurationBuilder
{ {
@@ -1,3 +1,3 @@
namespace Toolkit.Foundation; namespace Toolkit.Framework.Foundation;
public record WritableJsonConfigurationDescriptor(Type ConfigurationType, string Key) : IWritableJsonConfigurationDescriptor; public record WritableJsonConfigurationDescriptor(Type ConfigurationType, string Key) : IWritableJsonConfigurationDescriptor;
@@ -1,7 +1,7 @@
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.FileProviders;
namespace Toolkit.Foundation; namespace Toolkit.Framework.Foundation;
public static class WritableJsonConfigurationExtensions public static class WritableJsonConfigurationExtensions
{ {
@@ -3,7 +3,7 @@ using Newtonsoft.Json;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
using System.Text.Json; using System.Text.Json;
namespace Toolkit.Foundation; namespace Toolkit.Framework.Foundation;
internal class WritableJsonConfigurationFile internal class WritableJsonConfigurationFile
{ {
@@ -3,13 +3,12 @@ using Microsoft.Extensions.FileProviders;
using Newtonsoft.Json; using Newtonsoft.Json;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
namespace Toolkit.Foundation; namespace Toolkit.Framework.Foundation;
public class WritableJsonConfigurationProvider : JsonConfigurationProvider, IWritableConfigurationProvider public class WritableJsonConfigurationProvider : JsonConfigurationProvider, IWritableConfigurationProvider
{ {
public WritableJsonConfigurationProvider(JsonConfigurationSource source) : base(source) public WritableJsonConfigurationProvider(JsonConfigurationSource source) : base(source)
{ {
} }
public void Write<TValue>(string section, TValue value) where TValue : class, new() public void Write<TValue>(string section, TValue value) where TValue : class, new()
@@ -1,8 +1,8 @@
using Microsoft.Extensions.Configuration.Json; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration.Json;
using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.FileProviders;
namespace Toolkit.Foundation; namespace Toolkit.Framework.Foundation;
public class WritableJsonConfigurationSource : JsonConfigurationSource public class WritableJsonConfigurationSource : JsonConfigurationSource
{ {
+2 -2
View File
@@ -1,5 +1,5 @@
using Mediator; using Mediator;
namespace Toolkit.Foundation; namespace Toolkit.Framework.Foundation;
public abstract record Write<TConfiguration>(string Section, Action<TConfiguration> UpdateDelegate) : IRequest where TConfiguration : class; public abstract record Write<TConfiguration>(string Section, Action<TConfiguration> UpdateDelegate) : IRequest where TConfiguration : class;
@@ -1,6 +1,6 @@
using Mediator; using Mediator;
namespace Toolkit.Foundation; namespace Toolkit.Framework.Foundation;
public class WriteHandler<TConfiguration> : IRequestHandler<Write<TConfiguration>> where TConfiguration : class public class WriteHandler<TConfiguration> : IRequestHandler<Write<TConfiguration>> where TConfiguration : class
{ {
@@ -1,6 +1,6 @@
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting;
namespace Toolkit.Foundation; namespace Toolkit.Framework.Foundation;
public static class IHostBuilderExtensions public static class IHostBuilderExtensions
{ {
@@ -1,7 +1,7 @@
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.DependencyInjection.Extensions;
namespace Toolkit.Foundation; namespace Toolkit.Framework.Foundation;
public static class IServiceCollectionExtensions public static class IServiceCollectionExtensions
{ {
@@ -11,7 +11,6 @@ public static class IServiceCollectionExtensions
return serviceCollection; return serviceCollection;
} }
public static IServiceCollection AddFoundation(this IServiceCollection serviceCollection) public static IServiceCollection AddFoundation(this IServiceCollection serviceCollection)
{ {
serviceCollection.AddSingleton<IServiceFactory>(provider => new ServiceFactory(provider.GetService, (instanceType, parameters) => ActivatorUtilities.CreateInstance(provider, instanceType, parameters!))) serviceCollection.AddSingleton<IServiceFactory>(provider => new ServiceFactory(provider.GetService, (instanceType, parameters) => ActivatorUtilities.CreateInstance(provider, instanceType, parameters!)))
@@ -1,4 +1,4 @@
namespace Toolkit.Foundation; namespace Toolkit.Framework.Foundation;
public static class IServiceFactoryExtensions public static class IServiceFactoryExtensions
{ {
@@ -1,7 +1,7 @@
using Mediator; using Mediator;
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting;
namespace Toolkit.Foundation; namespace Toolkit.Framework.Foundation;
public class AppService : IHostedService public class AppService : IHostedService
{ {
+1 -2
View File
@@ -1,6 +1,5 @@
namespace Toolkit.Foundation; namespace Toolkit.Framework.Foundation;
public interface ICache public interface ICache
{ {
} }
@@ -1,4 +1,4 @@
namespace Toolkit.Foundation; namespace Toolkit.Framework.Foundation;
public interface IInitializable public interface IInitializable
{ {
@@ -1,4 +1,4 @@
namespace Toolkit.Foundation; namespace Toolkit.Framework.Foundation;
public interface IInitialization public interface IInitialization
{ {
@@ -1,6 +1,6 @@
using System.Diagnostics; using System.Diagnostics;
namespace Toolkit.Foundation; namespace Toolkit.Framework.Foundation;
public class Initialization : IInitialization public class Initialization : IInitialization
{ {
@@ -1,5 +1,5 @@
using Mediator; using Mediator;
namespace Toolkit.Foundation; namespace Toolkit.Framework.Foundation;
public record Initialize : IRequest; public record Initialize : IRequest;
@@ -1,6 +1,6 @@
using Mediator; using Mediator;
namespace Toolkit.Foundation; namespace Toolkit.Framework.Foundation;
public class InitializeHandler : IRequestHandler<Initialize> public class InitializeHandler : IRequestHandler<Initialize>
{ {
@@ -1,5 +1,5 @@
using Mediator; using Mediator;
namespace Toolkit.Foundation; namespace Toolkit.Framework.Foundation;
public record class Initialized : IRequest; public record class Initialized : IRequest;
@@ -1,10 +1,6 @@
using System; namespace Toolkit.Foundation;
using System.Collections.Generic;
namespace Toolkit.Foundation public interface IEventParameter
{ {
public interface IEventParameter List<object> GetValues(EventArgs args);
{
List<object> GetValues(EventArgs args);
}
} }
@@ -1,13 +1,11 @@
namespace Toolkit.Foundation;
namespace Toolkit.Foundation
{
public interface INavigationConfirmation
{
ValueTask<bool> CanConfirm();
}
public interface INavigated public interface INavigationConfirmation
{ {
ValueTask Navigated(); ValueTask<bool> CanConfirm();
} }
public interface INavigated
{
ValueTask Navigated();
} }
@@ -1,9 +1,8 @@
namespace Toolkit.Foundation namespace Toolkit.Framework.Foundation;
{
public interface INavigationRouteDescriptor
{
object Route { get; }
string? Name { get; } public interface INavigationRouteDescriptor
} {
object Route { get; }
string? Name { get; }
} }
@@ -1,8 +1,5 @@
using System.Collections.Generic; namespace Toolkit.Framework.Foundation;
namespace Toolkit.Foundation public interface INavigationRouteDescriptorCollection : IList<INavigationRouteDescriptor>
{ {
public interface INavigationRouteDescriptorCollection : IList<INavigationRouteDescriptor>
{
}
} }
@@ -1,9 +1,8 @@
namespace Toolkit.Foundation namespace Toolkit.Framework.Foundation;
{
public interface IParameter
{
string? Key { get; }
KeyValuePair<string, object>? GetValue(object target); public interface IParameter
} {
string? Key { get; }
KeyValuePair<string, object>? GetValue(object target);
} }
+22 -23
View File
@@ -1,29 +1,28 @@
using Mediator; using Mediator;
namespace Toolkit.Foundation namespace Toolkit.Framework.Foundation;
public record Navigate : IRequest
{ {
public record Navigate : IRequest public Navigate(string name, params object?[] parameters)
{ {
public Navigate(string name, params object?[] parameters) Name = name;
{ Parameters = parameters;
Name = name;
Parameters = parameters;
}
public Navigate(Type type, params object?[] parameters)
{
Type = type;
Parameters = parameters;
}
public Type? Type { get; }
public object? Route { get; init; }
public string? Name { get; }
public string? FriendlyName { get; init; }
public object?[] Parameters { get; }
} }
public Navigate(Type type, params object?[] parameters)
{
Type = type;
Parameters = parameters;
}
public Type? Type { get; }
public object? Route { get; init; }
public string? Name { get; }
public string? FriendlyName { get; init; }
public object?[] Parameters { get; }
} }
@@ -1,7 +1,5 @@
using Mediator; using Mediator;
namespace Toolkit.Foundation namespace Toolkit.Framework.Foundation;
{
public record NavigateBack(object Route) : IRequest;
} public record NavigateBack(object Route) : IRequest;
@@ -1,6 +1,5 @@
using Mediator; using Mediator;
namespace Toolkit.Foundation namespace Toolkit.Framework.Foundation;
{
public record NavigationRoute(string Name, object Route) : IRequest; public record NavigationRoute(string Name, object Route) : IRequest;
}
@@ -1,15 +1,14 @@
namespace Toolkit.Foundation namespace Toolkit.Framework.Foundation;
public record NavigationRouteDescriptor : INavigationRouteDescriptor
{ {
public record NavigationRouteDescriptor : INavigationRouteDescriptor public NavigationRouteDescriptor(string name, object route)
{ {
public NavigationRouteDescriptor(string name, object route) Name = name;
{ Route = route;
Name = name;
Route = route;
}
public string Name { get; }
public object Route { get; }
} }
public string Name { get; }
public object Route { get; }
} }
@@ -1,9 +1,8 @@
namespace Toolkit.Foundation namespace Toolkit.Framework.Foundation;
public class NavigationRouteDescriptorCollection : List<INavigationRouteDescriptor>, INavigationRouteDescriptorCollection
{ {
public class NavigationRouteDescriptorCollection : List<INavigationRouteDescriptor>, INavigationRouteDescriptorCollection public NavigationRouteDescriptorCollection(IEnumerable<INavigationRouteDescriptor> collection) : base(collection)
{ {
public NavigationRouteDescriptorCollection(IEnumerable<INavigationRouteDescriptor> collection) : base(collection)
{
}
} }
} }
@@ -1,7 +1,6 @@
namespace Toolkit.Foundation namespace Toolkit.Framework.Foundation;
public interface IServiceCreator<T>
{ {
public interface IServiceCreator<T> object Create(Func<Type, object[], object> creator, params object[] parameters);
{
object Create(Func<Type, object[], object> creator, params object[] parameters);
}
} }
@@ -1,9 +1,8 @@
namespace Toolkit.Foundation namespace Toolkit.Framework.Foundation;
{
public interface IServiceFactory
{
object? Create(Type type, params object?[] parameters);
T? Create<T>(Type type, params object?[] parameters); public interface IServiceFactory
} {
object? Create(Type type, params object?[] parameters);
T? Create<T>(Type type, params object?[] parameters);
} }
@@ -1,10 +1,9 @@
namespace Toolkit.Foundation namespace Toolkit.Framework.Foundation;
public class ServiceCreator<I, T> : IServiceCreator<I>
{ {
public class ServiceCreator<I, T> : IServiceCreator<I> public virtual object Create(Func<Type, object[], object> creator, params object[] parameters)
{ {
public virtual object Create(Func<Type, object[], object> creator, params object[] parameters) return creator(typeof(T), parameters);
{
return creator(typeof(T), parameters);
}
} }
} }
+19 -20
View File
@@ -1,26 +1,25 @@
namespace Toolkit.Foundation namespace Toolkit.Framework.Foundation;
public class ServiceFactory : IServiceFactory
{ {
public class ServiceFactory : IServiceFactory private readonly Func<Type, object?> factory;
private readonly Func<Type, object?[], object> creator;
public ServiceFactory(Func<Type, object?> factory, Func<Type, object?[], object> creator)
{ {
private readonly Func<Type, object?> factory; this.factory = factory;
private readonly Func<Type, object?[], object> creator; this.creator = creator;
}
public ServiceFactory(Func<Type, object?> factory, Func<Type, object?[], object> creator) public object? Create(Type type, params object?[] parameters)
{ {
this.factory = factory; dynamic? lookup = factory(typeof(IServiceCreator<>).MakeGenericType(type));
this.creator = creator; return lookup is not null ? lookup.Create(creator, parameters) : creator(type, parameters);
} }
public object? Create(Type type, params object?[] parameters) public T? Create<T>(Type type, params object?[] parameters)
{ {
dynamic? lookup = factory(typeof(IServiceCreator<>).MakeGenericType(type)); dynamic? lookup = factory(typeof(IServiceCreator<>).MakeGenericType(type));
return lookup is not null ? lookup.Create(creator, parameters) : creator(type, parameters); return lookup is not null ? (T)lookup.Create(creator, parameters) : (T)creator(type, parameters);
}
public T? Create<T>(Type type, params object?[] parameters)
{
dynamic? lookup = factory(typeof(IServiceCreator<>).MakeGenericType(type));
return lookup is not null ? (T)lookup.Create(creator, parameters) : (T)creator(type, parameters);
}
} }
} }
@@ -1,25 +1,24 @@
using System.Reflection; using System.Reflection;
namespace Toolkit.Foundation namespace Toolkit.Framework.Foundation;
internal class ServiceFactoryDescriptor
{ {
internal class ServiceFactoryDescriptor private readonly IServiceFactory serviceFactory;
public ServiceFactoryDescriptor(IServiceFactory serviceFactory)
{ {
private readonly IServiceFactory serviceFactory; this.serviceFactory = serviceFactory;
}
public ServiceFactoryDescriptor(IServiceFactory serviceFactory) public object? Create(Type type)
{ {
this.serviceFactory = serviceFactory; MethodInfo? methodInfo = typeof(ServiceFactoryDescriptor).GetMethod(nameof(Create), BindingFlags.NonPublic | BindingFlags.Instance);
} return methodInfo?.MakeGenericMethod(type).Invoke(this, new object[] { type });
}
public object? Create(Type type) private T? Create<T>(Type type)
{ {
MethodInfo? methodInfo = typeof(ServiceFactoryDescriptor).GetMethod(nameof(Create), BindingFlags.NonPublic | BindingFlags.Instance); return serviceFactory.Create<T>(type);
return methodInfo?.MakeGenericMethod(type).Invoke(this, new object[] { type });
}
private T Create<T>(Type type)
{
return serviceFactory.Create<T>(type);
}
} }
} }
@@ -1,7 +1,6 @@
namespace Toolkit.Foundation namespace Toolkit.Framework.Foundation;
public interface INamedDataTemplateFactory
{ {
public interface INamedDataTemplateFactory object? Create(string name, params object[] parameters);
{
object? Create(string name, params object[] parameters);
}
} }
@@ -1,7 +1,6 @@
namespace Toolkit.Foundation namespace Toolkit.Framework.Foundation;
public interface INamedTemplateFactory
{ {
public interface INamedTemplateFactory object? Create(string name);
{
object? Create(string name);
}
} }
@@ -1,13 +1,12 @@
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
namespace Toolkit.Foundation namespace Toolkit.Framework.Foundation;
public interface ITemplateBuilder
{ {
public interface ITemplateBuilder IReadOnlyCollection<ITemplateDescriptor> Descriptors { get; }
{
IReadOnlyCollection<ITemplateDescriptor> Descriptors { get; }
ITemplateBuilder Add<TViewModel, TView>(string name, ServiceLifetime lifetime = ServiceLifetime.Transient); ITemplateBuilder Add<TViewModel, TView>(string name, ServiceLifetime lifetime = ServiceLifetime.Transient);
ITemplateBuilder Add<TViewModel, TView>(ServiceLifetime lifetime = ServiceLifetime.Transient); ITemplateBuilder Add<TViewModel, TView>(ServiceLifetime lifetime = ServiceLifetime.Transient);
}
} }
@@ -1,15 +1,14 @@
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
namespace Toolkit.Foundation namespace Toolkit.Framework.Foundation;
public interface ITemplateDescriptor
{ {
public interface ITemplateDescriptor Type ContentType { get; }
{
Type ContentType { get; }
ServiceLifetime Lifetime { get; } ServiceLifetime Lifetime { get; }
string? Name { get; } string? Name { get; }
Type TemplateType { get; } Type TemplateType { get; }
}
} }
@@ -1,12 +1,10 @@
namespace Toolkit.Foundation namespace Toolkit.Framework.Foundation;
public interface ITemplateDescriptorProvider
{ {
ITemplateDescriptor? Get(string name);
public interface ITemplateDescriptorProvider ITemplateDescriptor? Get(Type type);
{
ITemplateDescriptor? Get(string name);
ITemplateDescriptor? Get(Type type); ITemplateDescriptor? Get<T>();
ITemplateDescriptor? Get<T>();
}
} }
@@ -1,9 +1,8 @@
using System.Diagnostics.CodeAnalysis; using System.Diagnostics.CodeAnalysis;
namespace Toolkit.Foundation namespace Toolkit.Framework.Foundation;
public interface ITemplateFactory
{ {
public interface ITemplateFactory object? Create([MaybeNull] object? data);
{
object? Create([MaybeNull] object? data);
}
} }
@@ -1,6 +1,5 @@
namespace Toolkit.Foundation namespace Toolkit.Framework.Foundation;
public interface ITemplateSelector
{ {
public interface ITemplateSelector
{
}
} }
@@ -1,7 +1,6 @@
namespace Toolkit.Foundation namespace Toolkit.Framework.Foundation;
public interface ITypedDataTemplateFactory
{ {
public interface ITypedDataTemplateFactory object? Create(Type type, params object[] parameters);
{
object? Create(Type type, params object[] parameters);
}
} }
@@ -1,36 +1,35 @@
namespace Toolkit.Foundation namespace Toolkit.Framework.Foundation;
public class NamedDataTemplateFactory : INamedDataTemplateFactory
{ {
public class NamedDataTemplateFactory : INamedDataTemplateFactory private readonly Dictionary<string, object> cache = new();
private readonly IReadOnlyCollection<ITemplateDescriptor> descriptors;
private readonly IServiceFactory serviceFactory;
public NamedDataTemplateFactory(IReadOnlyCollection<ITemplateDescriptor> descriptors,
IServiceFactory serviceFactory)
{ {
private readonly Dictionary<string, object> cache = new(); this.descriptors = descriptors;
this.serviceFactory = serviceFactory;
}
private readonly IReadOnlyCollection<ITemplateDescriptor> descriptors; public virtual object? Create(string name, params object[] parameters)
private readonly IServiceFactory serviceFactory; {
if (cache.TryGetValue(name, out object? data))
public NamedDataTemplateFactory(IReadOnlyCollection<ITemplateDescriptor> descriptors,
IServiceFactory serviceFactory)
{ {
this.descriptors = descriptors;
this.serviceFactory = serviceFactory;
}
public virtual object? Create(string name, params object[] parameters)
{
if (cache.TryGetValue(name, out object? data))
{
return data;
}
if (descriptors.FirstOrDefault(x => x.Name == name) is ITemplateDescriptor descriptor)
{
data = parameters is { Length: > 0 } ? serviceFactory.Create<object>(descriptor.ContentType, parameters) : serviceFactory.Create(descriptor.ContentType);
if (data is ICache cache)
{
this.cache[name] = cache;
}
}
return data; return data;
} }
if (descriptors.FirstOrDefault(x => x.Name == name) is ITemplateDescriptor descriptor)
{
data = parameters is { Length: > 0 } ? serviceFactory.Create<object>(descriptor.ContentType, parameters) : serviceFactory.Create(descriptor.ContentType);
if (data is ICache cache)
{
this.cache[name] = cache;
}
}
return data;
} }
} }
@@ -1,41 +1,40 @@
namespace Toolkit.Foundation namespace Toolkit.Framework.Foundation;
public class NamedTemplateFactory : INamedTemplateFactory
{ {
public class NamedTemplateFactory : INamedTemplateFactory private readonly Dictionary<string, object> cache = new();
private readonly ITemplateDescriptorProvider provider;
private readonly IServiceFactory serviceFactory;
public NamedTemplateFactory(ITemplateDescriptorProvider provider,
IServiceFactory serviceFactory)
{ {
private readonly Dictionary<string, object> cache = new(); this.provider = provider;
this.serviceFactory = serviceFactory;
}
private readonly ITemplateDescriptorProvider provider; public virtual object? Create(string name)
private readonly IServiceFactory serviceFactory; {
if (cache.TryGetValue(name, out object? view))
public NamedTemplateFactory(ITemplateDescriptorProvider provider,
IServiceFactory serviceFactory)
{ {
this.provider = provider;
this.serviceFactory = serviceFactory;
}
public virtual object? Create(string name)
{
if (cache.TryGetValue(name, out object? view))
{
return view;
}
if (provider.Get(name) is ITemplateDescriptor descriptor)
{
view = serviceFactory.Create(descriptor.TemplateType);
if (view is ICache cache)
{
this.cache[name] = cache;
}
if (descriptor.GetType().GenericTypeArguments is { Length: 2 })
{
(descriptor as dynamic).ViewInvoker?.Invoke(view);
}
}
return view; return view;
} }
if (provider.Get(name) is ITemplateDescriptor descriptor)
{
view = serviceFactory.Create(descriptor.TemplateType);
if (view is ICache cache)
{
this.cache[name] = cache;
}
if (descriptor.GetType().GenericTypeArguments is { Length: 2 })
{
(descriptor as dynamic).ViewInvoker?.Invoke(view);
}
}
return view;
} }
} }
@@ -1,24 +1,23 @@
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
namespace Toolkit.Foundation namespace Toolkit.Framework.Foundation;
public class TemplateBuilder : ITemplateBuilder
{ {
public class TemplateBuilder : ITemplateBuilder private readonly List<ITemplateDescriptor> descriptors = new();
public IReadOnlyCollection<ITemplateDescriptor> Descriptors => new ReadOnlyCollection<ITemplateDescriptor>(descriptors);
public ITemplateBuilder Add<TViewModel, TView>(string name, ServiceLifetime lifetime = ServiceLifetime.Transient)
{ {
private readonly List<ITemplateDescriptor> descriptors = new(); descriptors.Add(new TemplateDescriptor(typeof(TViewModel), typeof(TView), name, lifetime));
return this;
}
public IReadOnlyCollection<ITemplateDescriptor> Descriptors => new ReadOnlyCollection<ITemplateDescriptor>(descriptors); public ITemplateBuilder Add<TViewModel, TView>(ServiceLifetime lifetime = ServiceLifetime.Transient)
{
public ITemplateBuilder Add<TViewModel, TView>(string name, ServiceLifetime lifetime = ServiceLifetime.Transient) descriptors.Add(new TemplateDescriptor(typeof(TViewModel), typeof(TView), null, lifetime));
{ return this;
descriptors.Add(new TemplateDescriptor(typeof(TViewModel), typeof(TView), name, lifetime));
return this;
}
public ITemplateBuilder Add<TViewModel, TView>(ServiceLifetime lifetime = ServiceLifetime.Transient)
{
descriptors.Add(new TemplateDescriptor(typeof(TViewModel), typeof(TView), null, lifetime));
return this;
}
} }
} }
@@ -1,26 +1,25 @@
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
namespace Toolkit.Foundation namespace Toolkit.Framework.Foundation;
public class TemplateDescriptor : ITemplateDescriptor
{ {
public class TemplateDescriptor : ITemplateDescriptor public TemplateDescriptor(Type dataType,
Type templateType,
string? name = null,
ServiceLifetime lifetime = ServiceLifetime.Transient)
{ {
public TemplateDescriptor(Type dataType, TemplateType = templateType;
Type templateType, ContentType = dataType;
string? name = null, Name = name;
ServiceLifetime lifetime = ServiceLifetime.Transient) Lifetime = lifetime;
{
TemplateType = templateType;
ContentType = dataType;
Name = name;
Lifetime = lifetime;
}
public ServiceLifetime Lifetime { get; }
public Type TemplateType { get; }
public Type ContentType { get; }
public string? Name { get; }
} }
public ServiceLifetime Lifetime { get; }
public Type TemplateType { get; }
public Type ContentType { get; }
public string? Name { get; }
} }
@@ -1,42 +1,41 @@
namespace Toolkit.Foundation namespace Toolkit.Framework.Foundation;
public class TemplateDescriptorProvider : ITemplateDescriptorProvider
{ {
public class TemplateDescriptorProvider : ITemplateDescriptorProvider private readonly IReadOnlyCollection<ITemplateDescriptor> descriptors;
public TemplateDescriptorProvider(IReadOnlyCollection<ITemplateDescriptor> descriptors)
{ {
private readonly IReadOnlyCollection<ITemplateDescriptor> descriptors; this.descriptors = descriptors;
}
public TemplateDescriptorProvider(IReadOnlyCollection<ITemplateDescriptor> descriptors) public ITemplateDescriptor? Get(string name)
{
if (descriptors.FirstOrDefault(x => x.Name == name) is ITemplateDescriptor descriptor)
{ {
this.descriptors = descriptors; return descriptor;
} }
public ITemplateDescriptor? Get(string name) return null;
{ }
if (descriptors.FirstOrDefault(x => x.Name == name) is ITemplateDescriptor descriptor)
{
return descriptor;
}
return null; public ITemplateDescriptor? Get(Type type)
{
if (descriptors.FirstOrDefault(x => x.ContentType == type) is ITemplateDescriptor descriptor)
{
return descriptor;
} }
public ITemplateDescriptor? Get(Type type) return null;
{ }
if (descriptors.FirstOrDefault(x => x.ContentType == type) is ITemplateDescriptor descriptor)
{
return descriptor;
}
return null; public ITemplateDescriptor? Get<T>()
{
if (descriptors.FirstOrDefault(x => x.ContentType == typeof(T)) is ITemplateDescriptor descriptor)
{
return descriptor;
} }
public ITemplateDescriptor? Get<T>() return null;
{
if (descriptors.FirstOrDefault(x => x.ContentType == typeof(T)) is ITemplateDescriptor descriptor)
{
return descriptor;
}
return null;
}
} }
} }
@@ -1,43 +1,42 @@
using System.Diagnostics.CodeAnalysis; using System.Diagnostics.CodeAnalysis;
namespace Toolkit.Foundation namespace Toolkit.Framework.Foundation;
public class TemplateFactory : ITemplateFactory
{ {
public class TemplateFactory : ITemplateFactory private readonly Dictionary<object, object> cache = new();
private readonly ITemplateDescriptorProvider provider;
private readonly IServiceFactory serviceFactory;
public TemplateFactory(ITemplateDescriptorProvider provider,
IServiceFactory serviceFactory)
{ {
private readonly Dictionary<object, object> cache = new(); this.provider = provider;
this.serviceFactory = serviceFactory;
}
private readonly ITemplateDescriptorProvider provider; public virtual object? Create([MaybeNull] object? data)
private readonly IServiceFactory serviceFactory; {
if (data is null)
public TemplateFactory(ITemplateDescriptorProvider provider,
IServiceFactory serviceFactory)
{ {
this.provider = provider; return null;
this.serviceFactory = serviceFactory;
} }
public virtual object? Create([MaybeNull] object? data) if (cache.TryGetValue(data, out object? template))
{ {
if (data is null)
{
return null;
}
if (cache.TryGetValue(data, out object? template))
{
return template;
}
if (provider.Get(data.GetType()) is ITemplateDescriptor descriptor)
{
template = serviceFactory.Create(descriptor.TemplateType);
if (template is ICache cache)
{
this.cache[data] = cache;
}
}
return template; return template;
} }
if (provider.Get(data.GetType()) is ITemplateDescriptor descriptor)
{
template = serviceFactory.Create(descriptor.TemplateType);
if (template is ICache cache)
{
this.cache[data] = cache;
}
}
return template;
} }
} }
@@ -1,36 +1,35 @@
namespace Toolkit.Foundation namespace Toolkit.Framework.Foundation;
public class TypedDataTemplateFactory : ITypedDataTemplateFactory
{ {
public class TypedDataTemplateFactory : ITypedDataTemplateFactory private readonly Dictionary<Type, object> cache = new();
private readonly IReadOnlyCollection<ITemplateDescriptor> descriptors;
private readonly IServiceFactory serviceFactory;
public TypedDataTemplateFactory(IReadOnlyCollection<ITemplateDescriptor> descriptors,
IServiceFactory serviceFactory)
{ {
private readonly Dictionary<Type, object> cache = new(); this.descriptors = descriptors;
this.serviceFactory = serviceFactory;
}
private readonly IReadOnlyCollection<ITemplateDescriptor> descriptors; public virtual object? Create(Type type, params object[] parameters)
private readonly IServiceFactory serviceFactory; {
if (cache.TryGetValue(type, out object? data))
public TypedDataTemplateFactory(IReadOnlyCollection<ITemplateDescriptor> descriptors,
IServiceFactory serviceFactory)
{ {
this.descriptors = descriptors;
this.serviceFactory = serviceFactory;
}
public virtual object? Create(Type type, params object[] parameters)
{
if (cache.TryGetValue(type, out object? data))
{
return data;
}
if (descriptors.FirstOrDefault(x => x.ContentType == type) is ITemplateDescriptor descriptor)
{
data = parameters is { Length: > 0 } ? serviceFactory.Create<object>(descriptor.ContentType, parameters) : serviceFactory.Create(descriptor.ContentType);
if (data is ICache cache)
{
this.cache[type] = cache;
}
}
return data; return data;
} }
if (descriptors.FirstOrDefault(x => x.ContentType == type) is ITemplateDescriptor descriptor)
{
data = parameters is { Length: > 0 } ? serviceFactory.Create<object>(descriptor.ContentType, parameters) : serviceFactory.Create(descriptor.ContentType);
if (data is ICache cache)
{
this.cache[type] = cache;
}
}
return data;
} }
} }