moer changes
This commit is contained in:
@@ -11,6 +11,7 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.WindowsAppSDK" Version="1.5.240124002-experimental2" />
|
<PackageReference Include="Microsoft.WindowsAppSDK" Version="1.5.240124002-experimental2" />
|
||||||
<PackageReference Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.26031-preview" />
|
<PackageReference Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.26031-preview" />
|
||||||
|
<PackageReference Include="Microsoft.Xaml.Behaviors.WinUI.Managed" Version="2.0.9" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\Hyperbar.Interop.Windows\Hyperbar.Interop.Windows.csproj" />
|
<ProjectReference Include="..\Hyperbar.Interop.Windows\Hyperbar.Interop.Windows.csproj" />
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
namespace Hyperbar.UI.Windows;
|
||||||
|
|
||||||
|
public interface IViewModelTemplate
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
using Microsoft.UI.Xaml;
|
||||||
|
using Microsoft.Xaml.Interactivity;
|
||||||
|
|
||||||
|
namespace Hyperbar.UI.Windows;
|
||||||
|
|
||||||
|
public sealed class NavigateAction :
|
||||||
|
DependencyObject,
|
||||||
|
IAction
|
||||||
|
{
|
||||||
|
public static readonly DependencyProperty PathProperty =
|
||||||
|
DependencyProperty.Register(nameof(Path),
|
||||||
|
typeof(string), typeof(NavigateAction),
|
||||||
|
new PropertyMetadata(null));
|
||||||
|
|
||||||
|
public string Path
|
||||||
|
{
|
||||||
|
get => (string)GetValue(PathProperty);
|
||||||
|
set => SetValue(PathProperty, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public object Execute(object sender, object parameter)
|
||||||
|
{
|
||||||
|
if (sender is FrameworkElement frameworkElement)
|
||||||
|
{
|
||||||
|
if (frameworkElement.DataContext is IObservableViewModel observableViewModel)
|
||||||
|
{
|
||||||
|
observableViewModel.Mediator.PublishAsync(new Navigate(Path))
|
||||||
|
.GetAwaiter().GetResult();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
using Microsoft.UI.Xaml;
|
||||||
|
using Microsoft.UI.Xaml.Controls;
|
||||||
|
using Microsoft.UI.Xaml.Markup;
|
||||||
|
|
||||||
|
namespace Hyperbar.UI.Windows;
|
||||||
|
|
||||||
|
public class ViewModelTemplate(IViewModelTemplateDescriptorProvider descriptors) :
|
||||||
|
DataTemplateSelector,
|
||||||
|
IViewModelTemplate
|
||||||
|
{
|
||||||
|
protected override DataTemplate SelectTemplateCore(object item)
|
||||||
|
{
|
||||||
|
return descriptors.Get(item.GetType().Name) is IViewModelTemplateDescriptor descriptor
|
||||||
|
? CreateDataTemplate(descriptor)
|
||||||
|
: new DataTemplate();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override DataTemplate SelectTemplateCore(object item,
|
||||||
|
DependencyObject container) =>
|
||||||
|
SelectTemplateCore(item);
|
||||||
|
|
||||||
|
private DataTemplate CreateDataTemplate(IViewModelTemplateDescriptor descriptor)
|
||||||
|
{
|
||||||
|
string xamlString = @$"
|
||||||
|
<DataTemplate xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""
|
||||||
|
xmlns:ui=""using:{descriptor.TemplateType.Namespace}"">
|
||||||
|
<ui:{descriptor.TemplateType.Name} />
|
||||||
|
</DataTemplate>";
|
||||||
|
|
||||||
|
return (DataTemplate)XamlReader.Load(xamlString);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
using Microsoft.UI.Xaml;
|
|
||||||
using Microsoft.UI.Xaml.Controls;
|
|
||||||
|
|
||||||
namespace Hyperbar.UI.Windows;
|
|
||||||
|
|
||||||
public class ViewModelTemplatePresenter :
|
|
||||||
ContentPresenter
|
|
||||||
{
|
|
||||||
public ViewModelTemplatePresenter()
|
|
||||||
{
|
|
||||||
DataContextChanged += OnDataContextChanged;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnDataContextChanged(FrameworkElement sender,
|
|
||||||
DataContextChangedEventArgs args)
|
|
||||||
{
|
|
||||||
//if (DataContext is IViewModelTemplate templatedViewModel)
|
|
||||||
//{
|
|
||||||
// Content = templatedViewModel.TemplateFactory
|
|
||||||
// .Create(DataContext.GetType().Name);
|
|
||||||
//}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
using Microsoft.Extensions.DependencyInjection;
|
|
||||||
using Microsoft.UI.Xaml;
|
|
||||||
using Microsoft.UI.Xaml.Controls;
|
|
||||||
using Microsoft.UI.Xaml.Markup;
|
|
||||||
|
|
||||||
namespace Hyperbar.UI.Windows;
|
|
||||||
|
|
||||||
public class ViewModelTemplate :
|
|
||||||
MarkupExtension
|
|
||||||
{
|
|
||||||
protected override object ProvideValue(IXamlServiceProvider serviceProvider) =>
|
|
||||||
new ViewModelTemplateSelector();
|
|
||||||
|
|
||||||
internal class ViewModelTemplateSelector :
|
|
||||||
DataTemplateSelector
|
|
||||||
{
|
|
||||||
protected override DataTemplate SelectTemplateCore(object item) =>
|
|
||||||
item is IObservableViewModel observableViewModel &&
|
|
||||||
observableViewModel.ServiceProvider.GetService<IViewModelTemplateDescriptorProvider>()
|
|
||||||
is ViewModelTemplateDescriptorProvider descriptors &&
|
|
||||||
descriptors.Get(item.GetType().Name) is IViewModelTemplateDescriptor descriptor
|
|
||||||
? CreateDataTemplate(descriptor)
|
|
||||||
: new DataTemplate();
|
|
||||||
|
|
||||||
protected override DataTemplate SelectTemplateCore(object item,
|
|
||||||
DependencyObject container) =>
|
|
||||||
SelectTemplateCore(item);
|
|
||||||
|
|
||||||
private DataTemplate CreateDataTemplate(IViewModelTemplateDescriptor descriptor)
|
|
||||||
{
|
|
||||||
string xamlString = @$"
|
|
||||||
<DataTemplate xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""
|
|
||||||
xmlns:ui=""using:{descriptor.TemplateType.Namespace}"">
|
|
||||||
<ui:{descriptor.TemplateType.Name} />
|
|
||||||
</DataTemplate>";
|
|
||||||
|
|
||||||
return (DataTemplate)XamlReader.Load(xamlString);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,7 +1,19 @@
|
|||||||
using Microsoft.UI.Xaml;
|
using Microsoft.UI.Xaml;
|
||||||
|
using Microsoft.UI.Xaml.Controls;
|
||||||
|
|
||||||
namespace Hyperbar.UI.Windows;
|
namespace Hyperbar.UI.Windows;
|
||||||
|
|
||||||
|
public class FrameHandler :
|
||||||
|
INavigationHandler<Frame>
|
||||||
|
{
|
||||||
|
public Task Handle(Navigate<Frame> args,
|
||||||
|
CancellationToken cancellationToken = default)
|
||||||
|
{
|
||||||
|
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public class WindowHandler :
|
public class WindowHandler :
|
||||||
INavigationHandler<Window>
|
INavigationHandler<Window>
|
||||||
{
|
{
|
||||||
@@ -10,9 +22,19 @@ public class WindowHandler :
|
|||||||
{
|
{
|
||||||
if (args.Template is Window window)
|
if (args.Template is Window window)
|
||||||
{
|
{
|
||||||
if (window.Content is FrameworkElement frameworkElement)
|
if (window.Content is FrameworkElement content)
|
||||||
{
|
{
|
||||||
frameworkElement.DataContext = args.Content;
|
void HandleClosed(object sender, WindowEventArgs args)
|
||||||
|
{
|
||||||
|
window.Closed -= HandleClosed;
|
||||||
|
if (content.DataContext is IObservableViewModel observableViewModel)
|
||||||
|
{
|
||||||
|
observableViewModel.Dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
window.Closed += HandleClosed;
|
||||||
|
content.DataContext = args.Content;
|
||||||
}
|
}
|
||||||
|
|
||||||
window.Activate();
|
window.Activate();
|
||||||
|
|||||||
@@ -7,9 +7,8 @@ public partial class MediaButtonViewModel<TMediaButton>(IServiceProvider service
|
|||||||
IServiceFactory serviceFactory,
|
IServiceFactory serviceFactory,
|
||||||
IMediator mediator,
|
IMediator mediator,
|
||||||
IDisposer disposer,
|
IDisposer disposer,
|
||||||
IViewModelTemplateFactory templateFactory,
|
|
||||||
IRelayCommand invokeCommand) :
|
IRelayCommand invokeCommand) :
|
||||||
WidgetComponentViewModel(serviceProvider, serviceFactory, mediator, disposer, templateFactory),
|
WidgetComponentViewModel(serviceProvider, serviceFactory, mediator, disposer),
|
||||||
INotificationHandler<Changed<MediaButton<TMediaButton>>>,
|
INotificationHandler<Changed<MediaButton<TMediaButton>>>,
|
||||||
IMediaButtonViewModel
|
IMediaButtonViewModel
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
<ItemsControl
|
<ItemsControl
|
||||||
HorizontalAlignment="Right"
|
HorizontalAlignment="Right"
|
||||||
HorizontalContentAlignment="Right"
|
HorizontalContentAlignment="Right"
|
||||||
ItemTemplateSelector="{ui:ViewModelTemplate}"
|
ItemTemplateSelector="{Binding Template}"
|
||||||
ItemsSource="{x:Bind ViewModel}">
|
ItemsSource="{x:Bind ViewModel}">
|
||||||
<ItemsControl.ItemsPanel>
|
<ItemsControl.ItemsPanel>
|
||||||
<ItemsPanelTemplate>
|
<ItemsPanelTemplate>
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using CommunityToolkit.Mvvm.Input;
|
using CommunityToolkit.Mvvm.Input;
|
||||||
|
using Hyperbar.UI.Windows;
|
||||||
|
|
||||||
namespace Hyperbar.Widget.MediaController.Windows;
|
namespace Hyperbar.Widget.MediaController.Windows;
|
||||||
|
|
||||||
@@ -6,17 +7,17 @@ namespace Hyperbar.Widget.MediaController.Windows;
|
|||||||
public class MediaControllerViewModel :
|
public class MediaControllerViewModel :
|
||||||
ObservableCollectionViewModel<WidgetComponentViewModel>
|
ObservableCollectionViewModel<WidgetComponentViewModel>
|
||||||
{
|
{
|
||||||
public MediaControllerViewModel(IViewModelTemplateFactory templateFactory,
|
public MediaControllerViewModel(IViewModelTemplate template,
|
||||||
IServiceProvider serviceProvider,
|
IServiceProvider serviceProvider,
|
||||||
IServiceFactory serviceFactory,
|
IServiceFactory serviceFactory,
|
||||||
IMediator mediator,
|
IMediator mediator,
|
||||||
IDisposer disposer) : base(serviceProvider, serviceFactory, mediator, disposer)
|
IDisposer disposer) : base(serviceProvider, serviceFactory, mediator, disposer)
|
||||||
{
|
{
|
||||||
TemplateFactory = templateFactory;
|
Template = template;
|
||||||
|
|
||||||
Add<MediaInformationViewModel>();
|
Add<MediaInformationViewModel>();
|
||||||
|
|
||||||
Add<MediaButtonViewModel<MediaPreviousButton>>(new RelayCommand(async () =>
|
Add<MediaButtonViewModel<MediaPreviousButton>>(new RelayCommand(async () =>
|
||||||
await mediator.PublishAsync<Request<MediaPrevious>>()));
|
await mediator.PublishAsync<Request<MediaPrevious>>()));
|
||||||
|
|
||||||
Add<MediaButtonViewModel<MediaPlayPauseButton>>(new RelayCommand(async () =>
|
Add<MediaButtonViewModel<MediaPlayPauseButton>>(new RelayCommand(async () =>
|
||||||
@@ -26,5 +27,5 @@ public class MediaControllerViewModel :
|
|||||||
await mediator.PublishAsync<Request<MediaNext>>()));
|
await mediator.PublishAsync<Request<MediaNext>>()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public IViewModelTemplateFactory TemplateFactory { get; set; }
|
public IViewModelTemplate Template { get; }
|
||||||
}
|
}
|
||||||
@@ -2,10 +2,9 @@
|
|||||||
<UserControl
|
<UserControl
|
||||||
x:Class="Hyperbar.Widget.MediaController.Windows.MediaControllerWidgetView"
|
x:Class="Hyperbar.Widget.MediaController.Windows.MediaControllerWidgetView"
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||||
xmlns:ui="using:Hyperbar.UI.Windows">
|
|
||||||
<FlipView
|
<FlipView
|
||||||
Width="360"
|
Width="360"
|
||||||
ItemTemplateSelector="{ui:ViewModelTemplate}"
|
ItemTemplateSelector="{Binding Template}"
|
||||||
ItemsSource="{Binding}" />
|
ItemsSource="{Binding}" />
|
||||||
</UserControl>
|
</UserControl>
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
namespace Hyperbar.Widget.MediaController.Windows;
|
using Hyperbar.UI.Windows;
|
||||||
|
|
||||||
public class MediaControllerWidgetViewModel(IViewModelTemplateFactory templateFactory,
|
namespace Hyperbar.Widget.MediaController.Windows;
|
||||||
|
|
||||||
|
public class MediaControllerWidgetViewModel(IViewModelTemplate template,
|
||||||
IServiceProvider serviceProvider,
|
IServiceProvider serviceProvider,
|
||||||
IServiceFactory serviceFactory,
|
IServiceFactory serviceFactory,
|
||||||
IMediator mediator,
|
IMediator mediator,
|
||||||
@@ -9,5 +11,5 @@ public class MediaControllerWidgetViewModel(IViewModelTemplateFactory templateFa
|
|||||||
ObservableCollectionViewModel<MediaControllerViewModel>(serviceProvider, serviceFactory, mediator, disposer, items),
|
ObservableCollectionViewModel<MediaControllerViewModel>(serviceProvider, serviceFactory, mediator, disposer, items),
|
||||||
IWidgetViewModel
|
IWidgetViewModel
|
||||||
{
|
{
|
||||||
public IViewModelTemplateFactory TemplateFactory => templateFactory;
|
public IViewModelTemplate Template => template;
|
||||||
}
|
}
|
||||||
@@ -5,9 +5,8 @@ namespace Hyperbar.Widget.MediaController.Windows;
|
|||||||
public partial class MediaInformationViewModel(IServiceProvider serviceProvider,
|
public partial class MediaInformationViewModel(IServiceProvider serviceProvider,
|
||||||
IServiceFactory serviceFactory,
|
IServiceFactory serviceFactory,
|
||||||
IMediator mediator,
|
IMediator mediator,
|
||||||
IDisposer disposer,
|
IDisposer disposer) :
|
||||||
IViewModelTemplateFactory templateFactory) :
|
WidgetComponentViewModel(serviceProvider, serviceFactory, mediator, disposer),
|
||||||
WidgetComponentViewModel(serviceProvider, serviceFactory, mediator, disposer, templateFactory),
|
|
||||||
INotificationHandler<Changed<MediaInformation>>
|
INotificationHandler<Changed<MediaInformation>>
|
||||||
{
|
{
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
|
|||||||
@@ -3,13 +3,9 @@
|
|||||||
namespace Hyperbar.Widget.Primary.Windows;
|
namespace Hyperbar.Widget.Primary.Windows;
|
||||||
|
|
||||||
[NotificationHandler(nameof(PrimaryWidgetViewModel))]
|
[NotificationHandler(nameof(PrimaryWidgetViewModel))]
|
||||||
public class PrimaryWidgetViewModel(IViewModelTemplateFactory templateFactory,
|
public class PrimaryWidgetViewModel(IServiceProvider serviceProvider,
|
||||||
IServiceProvider serviceProvider,
|
|
||||||
IServiceFactory serviceFactory,
|
IServiceFactory serviceFactory,
|
||||||
IMediator mediator,
|
IMediator mediator,
|
||||||
IDisposer disposer) :
|
IDisposer disposer) :
|
||||||
ObservableCollectionViewModel<IWidgetComponentViewModel>(serviceProvider, serviceFactory, mediator, disposer),
|
ObservableCollectionViewModel<IWidgetComponentViewModel>(serviceProvider, serviceFactory, mediator, disposer),
|
||||||
IWidgetViewModel
|
IWidgetViewModel;
|
||||||
{
|
|
||||||
public IViewModelTemplateFactory TemplateFactory => templateFactory;
|
|
||||||
}
|
|
||||||
@@ -2,7 +2,6 @@
|
|||||||
using Hyperbar.UI.Windows;
|
using Hyperbar.UI.Windows;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.UI.Xaml.Markup;
|
using Microsoft.UI.Xaml.Markup;
|
||||||
using System.Collections.Generic;
|
|
||||||
|
|
||||||
namespace Hyperbar.Widget.Windows;
|
namespace Hyperbar.Widget.Windows;
|
||||||
|
|
||||||
@@ -19,8 +18,8 @@ public static class IServiceCollectionExtensions
|
|||||||
services.AddSingleton(provider.GetRequiredService<IList<IXamlMetadataProvider>>());
|
services.AddSingleton(provider.GetRequiredService<IList<IXamlMetadataProvider>>());
|
||||||
services.AddSingleton(provider.GetRequiredService<IDispatcher>());
|
services.AddSingleton(provider.GetRequiredService<IDispatcher>());
|
||||||
|
|
||||||
|
services.AddTransient<IViewModelTemplate, ViewModelTemplate>();
|
||||||
services.AddTransient<IViewModelTemplateDescriptorProvider, ViewModelTemplateDescriptorProvider>();
|
services.AddTransient<IViewModelTemplateDescriptorProvider, ViewModelTemplateDescriptorProvider>();
|
||||||
services.AddTransient<IViewModelTemplateFactory, ViewModelTemplateFactory>();
|
|
||||||
|
|
||||||
services.AddScoped<IVirtualKeyboard, VirtualKeyboard>();
|
services.AddScoped<IVirtualKeyboard, VirtualKeyboard>();
|
||||||
services.AddHandler<KeyAcceleratorHandler>();
|
services.AddHandler<KeyAcceleratorHandler>();
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
xmlns:interactivity="using:Microsoft.Xaml.Interactivity"
|
xmlns:interactivity="using:Microsoft.Xaml.Interactivity"
|
||||||
xmlns:ui="using:Hyperbar.UI.Windows">
|
xmlns:ui="using:Hyperbar.UI.Windows">
|
||||||
<Grid>
|
<Grid>
|
||||||
<ItemsControl ItemTemplateSelector="{ui:ViewModelTemplate}" ItemsSource="{Binding Mode=TwoWay}">
|
<ItemsControl ItemTemplateSelector="{Binding Template}" ItemsSource="{Binding Mode=TwoWay}">
|
||||||
<ItemsControl.ItemsPanel>
|
<ItemsControl.ItemsPanel>
|
||||||
<ItemsPanelTemplate>
|
<ItemsPanelTemplate>
|
||||||
<StackPanel Orientation="Horizontal" Spacing="8" />
|
<StackPanel Orientation="Horizontal" Spacing="8" />
|
||||||
|
|||||||
@@ -8,11 +8,10 @@ public partial class WidgetButtonViewModel(IServiceProvider serviceProvider,
|
|||||||
IServiceFactory serviceFactory,
|
IServiceFactory serviceFactory,
|
||||||
IMediator mediator,
|
IMediator mediator,
|
||||||
IDisposer disposer,
|
IDisposer disposer,
|
||||||
IViewModelTemplateFactory templateFactory,
|
|
||||||
Guid id,
|
Guid id,
|
||||||
string? text = null,
|
string? text = null,
|
||||||
string? icon = null,
|
string? icon = null,
|
||||||
RelayCommand? invokeCommand = null) : WidgetComponentViewModel(serviceProvider, serviceFactory, mediator, disposer, templateFactory)
|
RelayCommand? invokeCommand = null) : WidgetComponentViewModel(serviceProvider, serviceFactory, mediator, disposer)
|
||||||
{
|
{
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
private string? icon = icon;
|
private string? icon = icon;
|
||||||
|
|||||||
@@ -8,20 +8,16 @@ public partial class WidgetComponentViewModel :
|
|||||||
IServiceFactory serviceFactory,
|
IServiceFactory serviceFactory,
|
||||||
IMediator mediator,
|
IMediator mediator,
|
||||||
IDisposer disposer,
|
IDisposer disposer,
|
||||||
IViewModelTemplateFactory templateFactory,
|
|
||||||
IEnumerable<IWidgetComponentViewModel> items) : base(serviceProvider, serviceFactory, mediator, disposer, items)
|
IEnumerable<IWidgetComponentViewModel> items) : base(serviceProvider, serviceFactory, mediator, disposer, items)
|
||||||
{
|
{
|
||||||
TemplateFactory = templateFactory;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public WidgetComponentViewModel(IServiceProvider serviceProvider,
|
public WidgetComponentViewModel(IServiceProvider serviceProvider,
|
||||||
IServiceFactory serviceFactory,
|
IServiceFactory serviceFactory,
|
||||||
IMediator mediator,
|
IMediator mediator,
|
||||||
IDisposer disposer,
|
IDisposer disposer) : base(serviceProvider, serviceFactory, mediator, disposer)
|
||||||
IViewModelTemplateFactory templateFactory) : base(serviceProvider, serviceFactory, mediator, disposer)
|
|
||||||
{
|
{
|
||||||
TemplateFactory = templateFactory;
|
|
||||||
}
|
|
||||||
|
|
||||||
public IViewModelTemplateFactory TemplateFactory { get; private set; }
|
}
|
||||||
}
|
}
|
||||||
@@ -8,11 +8,10 @@ public partial class WidgetMenuViewModel(IServiceProvider serviceProvider,
|
|||||||
IServiceFactory serviceFactory,
|
IServiceFactory serviceFactory,
|
||||||
IMediator mediator,
|
IMediator mediator,
|
||||||
IDisposer disposer,
|
IDisposer disposer,
|
||||||
IViewModelTemplateFactory templateFactory,
|
|
||||||
Guid id = default,
|
Guid id = default,
|
||||||
string? text = null,
|
string? text = null,
|
||||||
string? icon = null,
|
string? icon = null,
|
||||||
RelayCommand? command = null) : WidgetComponentViewModel(serviceProvider, serviceFactory, mediator, disposer, templateFactory)
|
RelayCommand? command = null) : WidgetComponentViewModel(serviceProvider, serviceFactory, mediator, disposer)
|
||||||
{
|
{
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
private IRelayCommand? click = command;
|
private IRelayCommand? click = command;
|
||||||
|
|||||||
@@ -8,12 +8,11 @@ public partial class WidgetSplitButtonViewModel(IServiceProvider serviceProvider
|
|||||||
IServiceFactory serviceFactory,
|
IServiceFactory serviceFactory,
|
||||||
IMediator mediator,
|
IMediator mediator,
|
||||||
IDisposer disposer,
|
IDisposer disposer,
|
||||||
IViewModelTemplateFactory templateFactory,
|
|
||||||
IEnumerable<IWidgetComponentViewModel> items,
|
IEnumerable<IWidgetComponentViewModel> items,
|
||||||
Guid id = default,
|
Guid id = default,
|
||||||
string? text = null,
|
string? text = null,
|
||||||
string? icon = null,
|
string? icon = null,
|
||||||
RelayCommand? command = null) : WidgetComponentViewModel(serviceProvider, serviceFactory, mediator, disposer, templateFactory, items)
|
RelayCommand? command = null) : WidgetComponentViewModel(serviceProvider, serviceFactory, mediator, disposer, items)
|
||||||
{
|
{
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
private IRelayCommand? click = command;
|
private IRelayCommand? click = command;
|
||||||
|
|||||||
@@ -37,9 +37,9 @@ public partial class App :
|
|||||||
services.AddHostedService<AppService>();
|
services.AddHostedService<AppService>();
|
||||||
|
|
||||||
services.AddSingleton<IDispatcher>(new Dispatcher(DispatcherQueue.GetForCurrentThread()));
|
services.AddSingleton<IDispatcher>(new Dispatcher(DispatcherQueue.GetForCurrentThread()));
|
||||||
|
|
||||||
|
services.AddTransient<IViewModelTemplate, ViewModelTemplate>();
|
||||||
services.AddTransient<IViewModelTemplateDescriptorProvider, ViewModelTemplateDescriptorProvider>();
|
services.AddTransient<IViewModelTemplateDescriptorProvider, ViewModelTemplateDescriptorProvider>();
|
||||||
services.AddTransient<IViewModelTemplateFactory, ViewModelTemplateFactory>();
|
|
||||||
|
|
||||||
services.AddHandler<AppConfigurationChangedHandler>();
|
services.AddHandler<AppConfigurationChangedHandler>();
|
||||||
services.AddConfiguration<AppConfiguration>(args =>
|
services.AddConfiguration<AppConfiguration>(args =>
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
</UserControl.Resources>
|
</UserControl.Resources>
|
||||||
<ItemsControl
|
<ItemsControl
|
||||||
Margin="6,0,6,0"
|
Margin="6,0,6,0"
|
||||||
ItemTemplateSelector="{ui:ViewModelTemplate}"
|
ItemTemplateSelector="{Binding Template}"
|
||||||
ItemsSource="{x:Bind ViewModel, Mode=OneWay}">
|
ItemsSource="{x:Bind ViewModel, Mode=OneWay}">
|
||||||
<ItemsControl.ItemsPanel>
|
<ItemsControl.ItemsPanel>
|
||||||
<ItemsPanelTemplate>
|
<ItemsPanelTemplate>
|
||||||
|
|||||||
@@ -1,20 +1,23 @@
|
|||||||
namespace Hyperbar.Widget;
|
using Hyperbar.UI.Windows;
|
||||||
|
|
||||||
|
namespace Hyperbar.Widget;
|
||||||
|
|
||||||
|
|
||||||
[NotificationHandler(nameof(IWidgetHostViewModel))]
|
[NotificationHandler(nameof(IWidgetHostViewModel))]
|
||||||
public partial class ApplicationBarViewModel :
|
public partial class ApplicationBarViewModel :
|
||||||
ObservableCollectionViewModel<IDisposable>
|
ObservableCollectionViewModel<IDisposable>
|
||||||
{
|
{
|
||||||
public ApplicationBarViewModel(IViewModelTemplateFactory templateFactory,
|
public ApplicationBarViewModel(IViewModelTemplate template,
|
||||||
IServiceProvider serviceProvider,
|
IServiceProvider serviceProvider,
|
||||||
IServiceFactory serviceFactory,
|
IServiceFactory serviceFactory,
|
||||||
IMediator mediator,
|
IMediator mediator,
|
||||||
IDisposer disposer) : base(serviceProvider, serviceFactory, mediator, disposer)
|
IDisposer disposer) : base(serviceProvider, serviceFactory, mediator, disposer)
|
||||||
{
|
{
|
||||||
TemplateFactory = templateFactory;
|
Template = template;
|
||||||
|
|
||||||
Add<PrimaryViewModel>(0);
|
Add<PrimaryViewModel>(0);
|
||||||
Add<SecondaryViewModel>(1);
|
Add<SecondaryViewModel>(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public IViewModelTemplateFactory TemplateFactory { get; }
|
public IViewModelTemplate Template { get; }
|
||||||
}
|
}
|
||||||
@@ -3,4 +3,13 @@
|
|||||||
x:Class="Hyperbar.Windows.GeneralSettingsNavigationView"
|
x:Class="Hyperbar.Windows.GeneralSettingsNavigationView"
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
Content="General" />
|
xmlns:interactions="using:Microsoft.Xaml.Interactions.Core"
|
||||||
|
xmlns:interactivity="using:Microsoft.Xaml.Interactivity"
|
||||||
|
xmlns:ui="using:Hyperbar.UI.Windows"
|
||||||
|
Content="General">
|
||||||
|
<interactivity:Interaction.Behaviors>
|
||||||
|
<interactions:EventTriggerBehavior EventName="Tapped">
|
||||||
|
<ui:NavigateAction />
|
||||||
|
</interactions:EventTriggerBehavior>
|
||||||
|
</interactivity:Interaction.Behaviors>
|
||||||
|
</NavigationViewItem>
|
||||||
|
|||||||
@@ -2,9 +2,12 @@ using Microsoft.UI.Xaml.Controls;
|
|||||||
|
|
||||||
namespace Hyperbar.Windows;
|
namespace Hyperbar.Windows;
|
||||||
|
|
||||||
public sealed partial class GeneralSettingsNavigationView :
|
public partial class GeneralSettingsNavigationView :
|
||||||
NavigationViewItem
|
NavigationViewItem
|
||||||
{
|
{
|
||||||
public GeneralSettingsNavigationView() =>
|
public GeneralSettingsNavigationView() =>
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
|
protected GeneralSettingsNavigationViewModel ViewModel =>
|
||||||
|
(GeneralSettingsNavigationViewModel)DataContext;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
xmlns:ui="using:Hyperbar.UI.Windows">
|
xmlns:ui="using:Hyperbar.UI.Windows">
|
||||||
<ItemsControl
|
<ItemsControl
|
||||||
HorizontalAlignment="Center"
|
HorizontalAlignment="Center"
|
||||||
ItemTemplateSelector="{ui:ViewModelTemplate}"
|
ItemTemplateSelector="{Binding Template}"
|
||||||
ItemsSource="{x:Bind ViewModel}">
|
ItemsSource="{x:Bind ViewModel}">
|
||||||
<ItemsControl.ItemsPanel>
|
<ItemsControl.ItemsPanel>
|
||||||
<ItemsPanelTemplate>
|
<ItemsPanelTemplate>
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
using CommunityToolkit.Mvvm.ComponentModel;
|
using CommunityToolkit.Mvvm.ComponentModel;
|
||||||
|
using Hyperbar.UI.Windows;
|
||||||
|
|
||||||
namespace Hyperbar.Widget;
|
namespace Hyperbar.Widget;
|
||||||
|
|
||||||
[NotificationHandler(nameof(IWidgetHostViewModel))]
|
[NotificationHandler(nameof(IWidgetHostViewModel))]
|
||||||
public partial class PrimaryViewModel(IViewModelTemplateFactory templateFactory,
|
public partial class PrimaryViewModel(IViewModelTemplate template,
|
||||||
IServiceProvider serviceProvider,
|
IServiceProvider serviceProvider,
|
||||||
IServiceFactory serviceFactory,
|
IServiceFactory serviceFactory,
|
||||||
IMediator mediator,
|
IMediator mediator,
|
||||||
@@ -15,5 +16,6 @@ public partial class PrimaryViewModel(IViewModelTemplateFactory templateFactory,
|
|||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
private int index = index;
|
private int index = index;
|
||||||
|
|
||||||
public IViewModelTemplateFactory TemplateFactory => templateFactory;
|
public IViewModelTemplate Template => template;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -5,7 +5,7 @@
|
|||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:ui="using:Hyperbar.UI.Windows">
|
xmlns:ui="using:Hyperbar.UI.Windows">
|
||||||
<Grid>
|
<Grid>
|
||||||
<ItemsControl ItemTemplateSelector="{ui:ViewModelTemplate}" ItemsSource="{x:Bind ViewModel, Mode=OneWay}">
|
<ItemsControl ItemTemplateSelector="{Binding Template}" ItemsSource="{x:Bind ViewModel, Mode=OneWay}">
|
||||||
<ItemsControl.ItemsPanel>
|
<ItemsControl.ItemsPanel>
|
||||||
<ItemsPanelTemplate>
|
<ItemsPanelTemplate>
|
||||||
<ItemsStackPanel Orientation="Horizontal" />
|
<ItemsStackPanel Orientation="Horizontal" />
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using CommunityToolkit.Mvvm.ComponentModel;
|
using CommunityToolkit.Mvvm.ComponentModel;
|
||||||
|
using Hyperbar.UI.Windows;
|
||||||
using Hyperbar.Windows;
|
using Hyperbar.Windows;
|
||||||
|
|
||||||
namespace Hyperbar.Widget;
|
namespace Hyperbar.Widget;
|
||||||
@@ -9,18 +10,19 @@ public partial class SecondaryViewModel :
|
|||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
private int index;
|
private int index;
|
||||||
|
|
||||||
public SecondaryViewModel(IViewModelTemplateFactory templateFactory,
|
public SecondaryViewModel(IViewModelTemplate template,
|
||||||
IServiceProvider serviceProvider,
|
IServiceProvider serviceProvider,
|
||||||
IServiceFactory serviceFactory,
|
IServiceFactory serviceFactory,
|
||||||
IMediator mediator,
|
IMediator mediator,
|
||||||
IDisposer disposer,
|
IDisposer disposer,
|
||||||
int index) : base(serviceProvider, serviceFactory, mediator, disposer)
|
int index) : base(serviceProvider, serviceFactory, mediator, disposer)
|
||||||
{
|
{
|
||||||
TemplateFactory = templateFactory;
|
Template = template;
|
||||||
this.index = index;
|
this.index = index;
|
||||||
|
|
||||||
Add<SettingsButtonViewModel>();
|
Add<SettingsButtonViewModel>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public IViewModelTemplateFactory TemplateFactory { get; }
|
public IViewModelTemplate Template { get; }
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -2,7 +2,10 @@
|
|||||||
<UserControl
|
<UserControl
|
||||||
x:Class="Hyperbar.Windows.SettingsButtonView"
|
x:Class="Hyperbar.Windows.SettingsButtonView"
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:interactions="using:Microsoft.Xaml.Interactions.Core"
|
||||||
|
xmlns:interactivity="using:Microsoft.Xaml.Interactivity"
|
||||||
|
xmlns:windows="using:Hyperbar.UI.Windows">
|
||||||
<UserControl.Resources>
|
<UserControl.Resources>
|
||||||
<SolidColorBrush x:Key="ButtonBackground" Color="Transparent" />
|
<SolidColorBrush x:Key="ButtonBackground" Color="Transparent" />
|
||||||
<SolidColorBrush x:Key="ButtonBorderBrush" Color="Transparent" />
|
<SolidColorBrush x:Key="ButtonBorderBrush" Color="Transparent" />
|
||||||
@@ -18,8 +21,13 @@
|
|||||||
Width="{ThemeResource ButtonWidth}"
|
Width="{ThemeResource ButtonWidth}"
|
||||||
Height="{ThemeResource ButtonHeight}"
|
Height="{ThemeResource ButtonHeight}"
|
||||||
Padding="{ThemeResource ButtonPadding}"
|
Padding="{ThemeResource ButtonPadding}"
|
||||||
Command="{x:Bind ViewModel.InvokeCommand}"
|
|
||||||
Content=""
|
Content=""
|
||||||
FontFamily="{ThemeResource SymbolThemeFontFamily}"
|
FontFamily="{ThemeResource SymbolThemeFontFamily}"
|
||||||
FontSize="16" />
|
FontSize="16">
|
||||||
|
<interactivity:Interaction.Behaviors>
|
||||||
|
<interactions:EventTriggerBehavior EventName="Click">
|
||||||
|
<windows:NavigateAction Path="Settings" />
|
||||||
|
</interactions:EventTriggerBehavior>
|
||||||
|
</interactivity:Interaction.Behaviors>
|
||||||
|
</Button>
|
||||||
</UserControl>
|
</UserControl>
|
||||||
|
|||||||
@@ -1,24 +1,13 @@
|
|||||||
using CommunityToolkit.Mvvm.ComponentModel;
|
using Hyperbar.UI.Windows;
|
||||||
using CommunityToolkit.Mvvm.Input;
|
|
||||||
|
|
||||||
namespace Hyperbar.Windows;
|
namespace Hyperbar.Windows;
|
||||||
|
|
||||||
public partial class SettingsButtonViewModel :
|
public partial class SettingsButtonViewModel(IViewModelTemplate template,
|
||||||
ObservableViewModel
|
IServiceProvider serviceProvider,
|
||||||
|
IServiceFactory serviceFactory,
|
||||||
|
IMediator mediator,
|
||||||
|
IDisposer disposer) :
|
||||||
|
ObservableViewModel(serviceProvider, serviceFactory, mediator, disposer)
|
||||||
{
|
{
|
||||||
[ObservableProperty]
|
public IViewModelTemplate Template => template;
|
||||||
private IRelayCommand? invokeCommand;
|
}
|
||||||
|
|
||||||
public SettingsButtonViewModel(IViewModelTemplateFactory templateFactory,
|
|
||||||
IServiceProvider serviceProvider,
|
|
||||||
IServiceFactory serviceFactory,
|
|
||||||
IMediator mediator,
|
|
||||||
IDisposer disposer) : base(serviceProvider, serviceFactory, mediator, disposer)
|
|
||||||
{
|
|
||||||
TemplateFactory = templateFactory;
|
|
||||||
InvokeCommand = new AsyncRelayCommand(async () =>
|
|
||||||
await mediator.PublishAsync(new Navigate("Settings")));
|
|
||||||
}
|
|
||||||
|
|
||||||
public IViewModelTemplateFactory TemplateFactory { get; }
|
|
||||||
}
|
|
||||||
@@ -2,9 +2,7 @@
|
|||||||
<Window
|
<Window
|
||||||
x:Class="Hyperbar.Windows.SettingsView"
|
x:Class="Hyperbar.Windows.SettingsView"
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||||
xmlns:ui="using:Hyperbar.UI.Windows"
|
|
||||||
xmlns:windows="using:Hyperbar.Windows">
|
|
||||||
<Window.SystemBackdrop>
|
<Window.SystemBackdrop>
|
||||||
<MicaBackdrop />
|
<MicaBackdrop />
|
||||||
</Window.SystemBackdrop>
|
</Window.SystemBackdrop>
|
||||||
@@ -12,6 +10,6 @@
|
|||||||
IsBackButtonVisible="Collapsed"
|
IsBackButtonVisible="Collapsed"
|
||||||
IsPaneToggleButtonVisible="False"
|
IsPaneToggleButtonVisible="False"
|
||||||
IsSettingsVisible="False"
|
IsSettingsVisible="False"
|
||||||
MenuItemTemplateSelector="{ui:ViewModelTemplate}"
|
MenuItemTemplateSelector="{Binding Template}"
|
||||||
MenuItemsSource="{x:Bind ViewModel, Mode=OneWay}" />
|
MenuItemsSource="{x:Bind ViewModel, Mode=OneWay}" />
|
||||||
</Window>
|
</Window>
|
||||||
@@ -1,19 +1,21 @@
|
|||||||
namespace Hyperbar.Windows;
|
using Hyperbar.UI.Windows;
|
||||||
|
|
||||||
|
namespace Hyperbar.Windows;
|
||||||
|
|
||||||
public partial class SettingsViewModel :
|
public partial class SettingsViewModel :
|
||||||
ObservableCollectionViewModel<INavigationViewModel>
|
ObservableCollectionViewModel<INavigationViewModel>
|
||||||
{
|
{
|
||||||
public SettingsViewModel(IServiceProvider serviceProvider,
|
public SettingsViewModel(IViewModelTemplate template,
|
||||||
|
IServiceProvider serviceProvider,
|
||||||
IServiceFactory serviceFactory,
|
IServiceFactory serviceFactory,
|
||||||
IMediator mediator,
|
IMediator mediator,
|
||||||
IDisposer disposer,
|
IDisposer disposer) : base(serviceProvider, serviceFactory, mediator, disposer)
|
||||||
IViewModelTemplateFactory templateFactory) : base(serviceProvider, serviceFactory, mediator, disposer)
|
|
||||||
{
|
{
|
||||||
|
Template = template;
|
||||||
|
|
||||||
Add<GeneralSettingsNavigationViewModel>("General");
|
Add<GeneralSettingsNavigationViewModel>("General");
|
||||||
Add<WidgetSettingsNavigationViewModel>("Widgets");
|
Add<WidgetSettingsNavigationViewModel>("Widgets");
|
||||||
|
|
||||||
TemplateFactory = templateFactory;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public IViewModelTemplateFactory TemplateFactory { get; }
|
public IViewModelTemplate Template { get; }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,4 +3,13 @@
|
|||||||
x:Class="Hyperbar.Windows.WidgetSettingsNavigationView"
|
x:Class="Hyperbar.Windows.WidgetSettingsNavigationView"
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
Content="Widgets" />
|
xmlns:interactions="using:Microsoft.Xaml.Interactions.Core"
|
||||||
|
xmlns:interactivity="using:Microsoft.Xaml.Interactivity"
|
||||||
|
xmlns:ui="using:Hyperbar.UI.Windows"
|
||||||
|
Content="Widgets">
|
||||||
|
<interactivity:Interaction.Behaviors>
|
||||||
|
<interactions:EventTriggerBehavior EventName="Tapped">
|
||||||
|
<ui:NavigateAction />
|
||||||
|
</interactions:EventTriggerBehavior>
|
||||||
|
</interactivity:Interaction.Behaviors>
|
||||||
|
</NavigationViewItem>
|
||||||
|
|||||||
@@ -1,10 +1,14 @@
|
|||||||
|
using Hyperbar.Widget;
|
||||||
using Microsoft.UI.Xaml.Controls;
|
using Microsoft.UI.Xaml.Controls;
|
||||||
|
|
||||||
namespace Hyperbar.Windows;
|
namespace Hyperbar.Windows;
|
||||||
|
|
||||||
public sealed partial class WidgetSettingsNavigationView :
|
public partial class WidgetSettingsNavigationView :
|
||||||
NavigationViewItem
|
NavigationViewItem
|
||||||
{
|
{
|
||||||
public WidgetSettingsNavigationView() =>
|
public WidgetSettingsNavigationView() =>
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
|
protected WidgetSettingsNavigationViewModel ViewModel =>
|
||||||
|
(WidgetSettingsNavigationViewModel)DataContext;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ namespace Hyperbar;
|
|||||||
public class NavigateHandler :
|
public class NavigateHandler :
|
||||||
INotificationHandler<Navigate>
|
INotificationHandler<Navigate>
|
||||||
{
|
{
|
||||||
private readonly IEnumerable<IViewModelTemplateDescriptor> contentTemplateDescriptors;
|
private readonly IViewModelTemplateDescriptorProvider contentTemplateDescriptors;
|
||||||
private readonly IServiceProvider provider;
|
private readonly IServiceProvider provider;
|
||||||
private readonly IMediator mediator;
|
private readonly IMediator mediator;
|
||||||
private readonly IEnumerable<INavigationDescriptor> navigationDescriptors;
|
private readonly IEnumerable<INavigationDescriptor> navigationDescriptors;
|
||||||
@@ -13,7 +13,7 @@ public class NavigateHandler :
|
|||||||
public NavigateHandler(IServiceProvider provider,
|
public NavigateHandler(IServiceProvider provider,
|
||||||
IMediator mediator,
|
IMediator mediator,
|
||||||
IEnumerable<INavigationDescriptor> navigationDescriptors,
|
IEnumerable<INavigationDescriptor> navigationDescriptors,
|
||||||
IEnumerable<IViewModelTemplateDescriptor> contentTemplateDescriptors)
|
IViewModelTemplateDescriptorProvider contentTemplateDescriptors)
|
||||||
{
|
{
|
||||||
this.provider = provider;
|
this.provider = provider;
|
||||||
this.mediator = mediator;
|
this.mediator = mediator;
|
||||||
@@ -24,7 +24,7 @@ public class NavigateHandler :
|
|||||||
public async Task Handle(Navigate args,
|
public async Task Handle(Navigate args,
|
||||||
CancellationToken cancellationToken)
|
CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
if (contentTemplateDescriptors.FirstOrDefault(x => x.Key == args.Key)
|
if (contentTemplateDescriptors.Get(args.Key)
|
||||||
is IViewModelTemplateDescriptor contentTemplateDescriptor)
|
is IViewModelTemplateDescriptor contentTemplateDescriptor)
|
||||||
{
|
{
|
||||||
if (navigationDescriptors.FirstOrDefault(x => contentTemplateDescriptor.TemplateType == x.Type ||
|
if (navigationDescriptors.FirstOrDefault(x => contentTemplateDescriptor.TemplateType == x.Type ||
|
||||||
|
|||||||
@@ -1,6 +0,0 @@
|
|||||||
namespace Hyperbar;
|
|
||||||
|
|
||||||
public interface IViewModelTemplateFactory
|
|
||||||
{
|
|
||||||
object? Create(object key);
|
|
||||||
}
|
|
||||||
@@ -5,7 +5,7 @@ public class ViewModelTemplateDescriptorProvider(IEnumerable<IViewModelTemplateD
|
|||||||
{
|
{
|
||||||
public IViewModelTemplateDescriptor? Get(object key)
|
public IViewModelTemplateDescriptor? Get(object key)
|
||||||
{
|
{
|
||||||
if (descriptors.FirstOrDefault(x => x.Key == key)
|
if (descriptors.FirstOrDefault(x => x.Key.Equals(key))
|
||||||
is IViewModelTemplateDescriptor descriptor)
|
is IViewModelTemplateDescriptor descriptor)
|
||||||
{
|
{
|
||||||
return descriptor;
|
return descriptor;
|
||||||
|
|||||||
@@ -1,23 +0,0 @@
|
|||||||
using Microsoft.Extensions.DependencyInjection;
|
|
||||||
|
|
||||||
namespace Hyperbar;
|
|
||||||
|
|
||||||
public class ViewModelTemplateFactory(IViewModelTemplateDescriptorProvider descriptors,
|
|
||||||
IServiceProvider services) :
|
|
||||||
IViewModelTemplateFactory
|
|
||||||
{
|
|
||||||
public object? Create(object key)
|
|
||||||
{
|
|
||||||
if (descriptors.Get(key)
|
|
||||||
is IViewModelTemplateDescriptor descriptor)
|
|
||||||
{
|
|
||||||
if (services.GetRequiredKeyedService(descriptor.TemplateType,
|
|
||||||
descriptor.Key) is { } template)
|
|
||||||
{
|
|
||||||
return template;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return default;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user