tidy
This commit is contained in:
@@ -5,88 +5,36 @@ using Microsoft.UI.Xaml.Markup;
|
|||||||
|
|
||||||
namespace Hyperbar.UI.Windows;
|
namespace Hyperbar.UI.Windows;
|
||||||
|
|
||||||
public class ImplicitTemplate :
|
public class ViewModelTemplate :
|
||||||
MarkupExtension
|
MarkupExtension
|
||||||
{
|
{
|
||||||
protected override object ProvideValue(IXamlServiceProvider serviceProvider) =>
|
protected override object ProvideValue(IXamlServiceProvider serviceProvider) =>
|
||||||
new ImplicitTemplateSelector();
|
new ViewModelTemplateSelector();
|
||||||
|
|
||||||
internal class ImplicitTemplateSelector :
|
internal class ViewModelTemplateSelector :
|
||||||
DataTemplateSelector
|
DataTemplateSelector
|
||||||
{
|
{
|
||||||
protected override DataTemplate SelectTemplateCore(object item,
|
protected override DataTemplate SelectTemplateCore(object item) =>
|
||||||
DependencyObject container)
|
item is IObservableViewModel observableViewModel &&
|
||||||
{
|
observableViewModel.ServiceProvider.GetService<IViewModelTemplateDescriptorProvider>()
|
||||||
|
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 = @$"
|
||||||
<DataTemplate xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""
|
<DataTemplate xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""
|
||||||
xmlns:ui=""using:Hyperbar.UI.Windows"">
|
xmlns:ui=""using:{descriptor.TemplateType.Namespace}"">
|
||||||
<ui:ViewModelTemplatePresenter VerticalContentAlignment=""Stretch""
|
<ui:{descriptor.TemplateType.Name} />
|
||||||
HorizontalContentAlignment=""Stretch""
|
|
||||||
HorizontalAlignment=""Stretch""
|
|
||||||
VerticalAlignment=""Stretch""/>
|
|
||||||
</DataTemplate>";
|
</DataTemplate>";
|
||||||
|
|
||||||
return (DataTemplate)XamlReader.Load(xamlString);
|
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<IViewModelTemplateDescriptorProvider>()
|
|
||||||
is ViewModelTemplateDescriptorProvider descriptors)
|
|
||||||
{
|
|
||||||
if (descriptors.Get(item.GetType().Name) is 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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return new DataTemplate();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override DataTemplate SelectTemplateCore(object item,
|
|
||||||
DependencyObject container)
|
|
||||||
{
|
|
||||||
if (item is IObservableViewModel observableViewModel)
|
|
||||||
{
|
|
||||||
if (observableViewModel.ServiceProvider.GetService<IViewModelTemplateDescriptorProvider>()
|
|
||||||
is ViewModelTemplateDescriptorProvider descriptors)
|
|
||||||
{
|
|
||||||
if (descriptors.Get(item.GetType().Name) is 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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return new DataTemplate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user