more settings work
This commit is contained in:
@@ -1,17 +1,21 @@
|
||||
using Microsoft.UI.Xaml;
|
||||
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(IViewModelTemplateProvider descriptors) :
|
||||
public class ViewModelTemplateSelector :
|
||||
DataTemplateSelector,
|
||||
IViewModelTemplateSelector
|
||||
{
|
||||
protected override DataTemplate SelectTemplateCore(object item)
|
||||
{
|
||||
return descriptors.Get(item.GetType().Name) is Hyperbar.IViewModelTemplate descriptor
|
||||
? CreateDataTemplate(descriptor)
|
||||
return item is IObservableViewModel observableViewModel && observableViewModel.ServiceProvider.GetService<IViewModelTemplateProvider>()
|
||||
is IViewModelTemplateProvider viewModelTemplateProvider
|
||||
? viewModelTemplateProvider.Get(item.GetType().Name) is IViewModelTemplate viewModelTemplate
|
||||
? CreateDataTemplate(viewModelTemplate)
|
||||
: new DataTemplate()
|
||||
: new DataTemplate();
|
||||
}
|
||||
|
||||
@@ -19,12 +23,12 @@ public class ViewModelTemplateSelector(IViewModelTemplateProvider descriptors) :
|
||||
DependencyObject container) =>
|
||||
SelectTemplateCore(item);
|
||||
|
||||
private static DataTemplate CreateDataTemplate(Hyperbar.IViewModelTemplate descriptor)
|
||||
private static DataTemplate CreateDataTemplate(IViewModelTemplate template)
|
||||
{
|
||||
string xamlString = @$"
|
||||
<DataTemplate xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""
|
||||
xmlns:ui=""using:{descriptor.TemplateType.Namespace}"">
|
||||
<ui:{descriptor.TemplateType.Name} />
|
||||
xmlns:ui=""using:{template.ViewType.Namespace}"">
|
||||
<ui:{template.ViewType.Name} />
|
||||
</DataTemplate>";
|
||||
|
||||
return (DataTemplate)XamlReader.Load(xamlString);
|
||||
|
||||
Reference in New Issue
Block a user