Added Scoped Handlers

This commit is contained in:
Dan Clark
2024-12-04 22:35:58 +00:00
parent 9b9330c8cc
commit 6454e1bb6f
12 changed files with 235 additions and 56 deletions
+15 -7
View File
@@ -10,6 +10,8 @@ public class ContentTemplate :
DataTemplateSelector,
IContentTemplate
{
private readonly Dictionary<string, DataTemplate> _cache = [];
protected override DataTemplate? SelectTemplateCore(object item)
{
if (item is IObservableViewModel observableViewModel)
@@ -17,10 +19,19 @@ public class ContentTemplate :
if (observableViewModel.Provider is IServiceProvider provider)
{
Type itemType = item.GetType();
if (provider.GetRequiredKeyedService<IContentTemplateDescriptor>(itemType.Name.Replace("ViewModel", ""))
string key = itemType.Name.Replace("ViewModel", "");
if (_cache.TryGetValue(key, out DataTemplate? cachedTemplate))
{
return cachedTemplate;
}
if (provider.GetRequiredKeyedService<IContentTemplateDescriptor>(key)
is IContentTemplateDescriptor descriptor)
{
return CreateDataTemplate(descriptor);
var newTemplate = CreateDataTemplate(descriptor);
_cache[key] = newTemplate;
return newTemplate;
}
}
}
@@ -29,10 +40,7 @@ public class ContentTemplate :
}
protected override DataTemplate? SelectTemplateCore(object item,
DependencyObject container)
{
return SelectTemplateCore(item);
}
DependencyObject container) => SelectTemplateCore(item);
private static DataTemplate CreateDataTemplate(IContentTemplateDescriptor descriptor)
{
@@ -44,4 +52,4 @@ public class ContentTemplate :
return (DataTemplate)XamlReader.Load(xamlString);
}
}
}