using Hyperbar.UI.Windows; namespace Hyperbar.Widget.Windows; public class WidgetConfigurationViewModel : ValueViewModel, INotificationHandler> where TConfiguration : class { private readonly Func valueFactory; public WidgetConfigurationViewModel(IServiceProvider serviceProvider, IServiceFactory serviceFactory, IPublisher publisher, IDisposer disposer, Func valueFactory) : base(serviceProvider, serviceFactory, publisher, disposer) { this.valueFactory = valueFactory; } public Task Handle(Changed args, CancellationToken cancellationToken = default) { if (args.Value is TConfiguration configuration) { valueFactory.Invoke(configuration); } return Task.CompletedTask; } } public class WidgetConfigurationViewModel : ObservableCollectionViewModel { public WidgetConfigurationViewModel(IViewModelTemplateSelector viewModelTemplateSelector, IServiceProvider serviceProvider, IServiceFactory serviceFactory, IPublisher publisher, ISubscriber subscriber, IDisposer disposer) : base(serviceProvider, serviceFactory, publisher, subscriber, disposer) { ViewModelTemplateSelector = viewModelTemplateSelector; Add>((Func)(config => config.Value)); } public IViewModelTemplateSelector ViewModelTemplateSelector { get; } }