using Microsoft.Extensions.DependencyInjection; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; using Microsoft.UI.Xaml.Markup; namespace Hyperbar.UI.Windows; public class ViewModelTemplateSelector : DataTemplateSelector, IViewModelTemplateSelector { protected override DataTemplate SelectTemplateCore(object item) { return item is IObservableViewModel observableViewModel && observableViewModel.ServiceProvider.GetService() is IViewModelTemplateProvider viewModelTemplateProvider ? viewModelTemplateProvider.Get(item.GetType().Name) is IViewModelTemplate viewModelTemplate ? CreateDataTemplate(viewModelTemplate) : new DataTemplate() : new DataTemplate(); } protected override DataTemplate SelectTemplateCore(object item, DependencyObject container) => SelectTemplateCore(item); private static DataTemplate CreateDataTemplate(IViewModelTemplate template) { string xamlString = @$" "; return (DataTemplate)XamlReader.Load(xamlString); } }