Add supported for key mediator handelrs

This commit is contained in:
TheXamlGuy
2024-06-02 15:00:59 +01:00
parent 5a0c3bf317
commit 71f86be715
35 changed files with 321 additions and 71 deletions
+28 -6
View File
@@ -9,6 +9,7 @@ using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.Extensions.Hosting;
using System;
using System.Collections.Generic;
using System.Linq;
using Toolkit.Avalonia;
using Toolkit.Foundation;
@@ -69,6 +70,15 @@ public partial class App : Application
services.AddTransient<ISecurityKeyFactory, SecurityKeyFactory>();
services.AddTransient<ILockerStorageFactory, LockerStorageFactory>();
services.AddTransient<IItemConfigurationCollection, ItemConfigurationCollection>(provider =>
{
IEnumerable<IConfigurationDescriptor<ItemConfiguration>> items =
provider.GetServices<IConfigurationDescriptor<ItemConfiguration>>() ??
Enumerable.Empty<IConfigurationDescriptor<ItemConfiguration>>();
return new ItemConfigurationCollection(items.ToDictionary(x => x.Name, x => (Func<ItemConfiguration>)(() => x.Value)));
});
services.TryAddSingleton<IValueStore<SecurityKey>, ValueStore<SecurityKey>>();
services.TryAddSingleton<IValueStore<LockerConnection>, ValueStore<LockerConnection>>();
@@ -100,6 +110,7 @@ public partial class App : Application
services.AddTemplate<LockerViewModel, LockerView>("Locker");
services.AddTemplate<ItemCollectionViewModel, ItemCollectionView>("ContentItemCollection");
services.AddHandler<AggerateItemViewModelHandler>();
services.AddTemplate<LockerHeaderViewModel, LockerHeaderView>("LockerHeader");
@@ -112,10 +123,18 @@ public partial class App : Application
services.AddHandler<AggregateItemCategoryViewModelHandler>();
services.AddScoped<IValueStore<Item<(Guid, string)>>, ValueStore<Item<(Guid, string)>>>();
services.AddTemplate<AddItemNavigationViewModel, AddItemNavigationView>();
services.AddTemplate<ItemNavigationViewModel, ItemNavigationView>();
services.AddTemplate<EmptyItemCollectionViewModel, EmptyItemCollectionView>("EmptyItemCollection");
services.AddTemplate<ItemViewModel, ItemView>("Item");
services.AddTemplate<ItemHeaderViewModel, ItemHeaderView>();
services.AddTemplate<ItemContentViewModel, ItemContentView>();
services.AddHandler<AggregateItemContentViewModelHandler>();
services.AddHandler<AggregateItemContentFromCategoryViewModelHandler>();
services.AddTemplate<ItemCommandHeaderViewModel, ItemCommandHeaderView>("ItemCommandHeader");
@@ -127,12 +146,10 @@ public partial class App : Application
services.AddTemplate<EditItemActionViewModel, EditItemActionView>();
services.AddTemplate<DeleteItemActionViewModel, DeleteItemActionView>();
services.AddTemplate<EmptyItemCollectionViewModel, EmptyItemCollectionView>("EmptyItemCollection");
services.AddTemplate<ItemHeaderViewModel, ItemHeaderView>();
services.AddTemplate<ItemContentViewModel, ItemContentView>();
services.AddTemplate<AddItemNavigationViewModel, AddItemNavigationView>();
services.AddScoped<IValueStore<Item<(Guid, string)>>, ValueStore<Item<(Guid, string)>>>();
services.AddTemplate<ItemTextEntryViewModel, ItemTextEntryView>();
services.AddTemplate<ItemPasswordEntryViewModel, ItemPasswordEntryView>();
services.AddTemplate<ItemMaskedTextEntryViewModel, ItemMaskedTextEntryView>();
services.AddTemplate<ItemDropdownEntryViewModel, ItemDropdownEntryView>();
services.AddHandler<ConfirmUpdateItemHandler>(nameof(ItemState.Write));
services.AddHandler<ConfirmCreateItemHandler>(nameof(ItemState.New));
@@ -142,6 +159,11 @@ public partial class App : Application
services.AddHandler<FavouriteItemHandler>();
services.AddHandler<UnfavouriteItemHandler>();
services.AddHandler<ItemTextEntryViewModelHandler>(nameof(TextEntryConfiguration));
services.AddHandler<ItemPasswordEntryViewModelHandler>(nameof(PasswordEntryConfiguration));
services.AddHandler<ItemMaskedTextEntryViewModelHandler>(nameof(MaskedTextEntryConfiguration));
services.AddHandler<ItemDropdownEntryViewModelHandler>(nameof(DropdownEntryConfiguration));
services.AddHandler<ItemCreatedHandler>(ServiceLifetime.Singleton);
services.AddHandler<ItemModifiedHandler>(ServiceLifetime.Singleton);
});
@@ -3,24 +3,12 @@
xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:Bitvault"
x:DataType="vm:ItemCategoryNavigationViewModel">
x:DataType="vm:ItemCategoryNavigationViewModel"
ListBoxExtension.IsItemInvokedEnabled="True">
<Interaction.Behaviors>
<AttachedBehaviour>
<ConditionAction>
<ConditionAction.Condition>
<ConditionalExpression ForwardChaining="And">
<ComparisonCondition LeftOperand="{Binding Selected}" RightOperand="True" />
</ConditionalExpression>
</ConditionAction.Condition>
<InvokeCommandAction Command="{Binding InvokeCommand}" />
</ConditionAction>
</AttachedBehaviour>
<DataTriggerBehavior
Binding="{Binding Selected}"
ComparisonCondition="Equal"
Value="True">
<AttachedEventTriggerBehaviour RoutedEvent="{x:Static ListBoxExtension.ItemInvokedEvent}">
<InvokeCommandAction Command="{Binding InvokeCommand}" />
</DataTriggerBehavior>
</AttachedEventTriggerBehaviour>
</Interaction.Behaviors>
<Grid Background="Transparent" ColumnDefinitions="Auto,*">
<PersonPicture
@@ -0,0 +1,8 @@
<UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="Bitvault.Avalonia.ItemDropdownEntryView">
Welcome to Avalonia!
</UserControl>
@@ -0,0 +1,12 @@
using Avalonia.Controls;
namespace Bitvault.Avalonia
{
public partial class ItemDropdownEntryView : UserControl
{
public ItemDropdownEntryView()
{
InitializeComponent();
}
}
}
@@ -0,0 +1,8 @@
<UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="Bitvault.Avalonia.ItemMaskedTextEntryView">
Welcome to Avalonia!
</UserControl>
@@ -0,0 +1,12 @@
using Avalonia.Controls;
namespace Bitvault.Avalonia
{
public partial class ItemMaskedTextEntryView : UserControl
{
public ItemMaskedTextEntryView()
{
InitializeComponent();
}
}
}
@@ -14,6 +14,7 @@
Region="{Binding Named, StringFormat='{}{0}:Content'}"
Route="Item"
Scope="self">
<Parameter Key="FromCategory" Value="{x:False}" />
<Parameter Key="State" Value="{x:Static vm:ItemState.Read}" />
<Parameter Key="Name" Value="{Binding Name}" />
<Parameter Key="Favourite" Value="{Binding Favourite}" />
@@ -0,0 +1,8 @@
<UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="Bitvault.Avalonia.ItemPasswordEntryView">
Welcome to Avalonia!
</UserControl>
@@ -0,0 +1,12 @@
using Avalonia.Controls;
namespace Bitvault.Avalonia
{
public partial class ItemPasswordEntryView : UserControl
{
public ItemPasswordEntryView()
{
InitializeComponent();
}
}
}
@@ -0,0 +1,8 @@
<UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="Bitvault.Avalonia.ItemTextEntryView">
Welcome to Avalonia!
</UserControl>
@@ -0,0 +1,12 @@
using Avalonia.Controls;
namespace Bitvault.Avalonia
{
public partial class ItemTextEntryView : UserControl
{
public ItemTextEntryView()
{
InitializeComponent();
}
}
}