diff --git a/Hyperbar.UI.Windows/ViewModelTemplateSelector.cs b/Hyperbar.UI.Windows/ViewModelTemplateSelector.cs index d3d675b..ecf29ce 100644 --- a/Hyperbar.UI.Windows/ViewModelTemplateSelector.cs +++ b/Hyperbar.UI.Windows/ViewModelTemplateSelector.cs @@ -5,88 +5,36 @@ using Microsoft.UI.Xaml.Markup; namespace Hyperbar.UI.Windows; -public class ImplicitTemplate : +public class ViewModelTemplate : MarkupExtension { protected override object ProvideValue(IXamlServiceProvider serviceProvider) => - new ImplicitTemplateSelector(); + new ViewModelTemplateSelector(); - internal class ImplicitTemplateSelector : + internal class ViewModelTemplateSelector : DataTemplateSelector { - protected override DataTemplate SelectTemplateCore(object item, - DependencyObject container) - { - + protected override DataTemplate SelectTemplateCore(object item) => + item is IObservableViewModel observableViewModel && + observableViewModel.ServiceProvider.GetService() + is ViewModelTemplateDescriptorProvider descriptors && + descriptors.Get(item.GetType().Name) is IViewModelTemplateDescriptor descriptor + ? CreateDataTemplate(descriptor) + : new DataTemplate(); - string xamlString = @" + protected override DataTemplate SelectTemplateCore(object item, + DependencyObject container) => + SelectTemplateCore(item); + + private DataTemplate CreateDataTemplate(IViewModelTemplateDescriptor descriptor) + { + string xamlString = @$" - + xmlns:ui=""using:{descriptor.TemplateType.Namespace}""> + "; return (DataTemplate)XamlReader.Load(xamlString); } } } - -public class ViewModelTemplate : - MarkupExtension -{ - protected override object ProvideValue(IXamlServiceProvider serviceProvider) => - new ViewModelTemplateSelector(); - - internal class ViewModelTemplateSelector : - DataTemplateSelector - { - protected override DataTemplate SelectTemplateCore(object item) - { - if (item is IObservableViewModel observableViewModel) - { - if (observableViewModel.ServiceProvider.GetService() - is ViewModelTemplateDescriptorProvider descriptors) - { - if (descriptors.Get(item.GetType().Name) is IViewModelTemplateDescriptor descriptor) - { - string xamlString = @$" - - - "; - - return (DataTemplate)XamlReader.Load(xamlString); - } - } - } - - return new DataTemplate(); - } - - protected override DataTemplate SelectTemplateCore(object item, - DependencyObject container) - { - if (item is IObservableViewModel observableViewModel) - { - if (observableViewModel.ServiceProvider.GetService() - is ViewModelTemplateDescriptorProvider descriptors) - { - if (descriptors.Get(item.GetType().Name) is IViewModelTemplateDescriptor descriptor) - { - string xamlString = @$" - - - "; - - return (DataTemplate)XamlReader.Load(xamlString); - } - } - } - - return new DataTemplate(); - } - } -}