|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
namespace AvalonDockMVVM
{
/// <summary>
/// Helper class for lookup of data-templates.
/// </summary>
internal static class DataTemplateUtils
{
/// <summary>
/// Find a DataTemplate for the specified type in the visual-tree.
/// </summary>
public static DataTemplate FindDataTemplate(Type type, FrameworkElement element)
{
var dataTemplate = element.TryFindResource(new DataTemplateKey(type)) as DataTemplate;
if (dataTemplate != null)
{
return dataTemplate;
}
if (type.BaseType != null && type.BaseType != typeof(object))
{
dataTemplate = FindDataTemplate(type.BaseType, element);
if (dataTemplate != null)
{
return dataTemplate;
}
}
foreach (var interfaceType in type.GetInterfaces())
{
dataTemplate = FindDataTemplate(interfaceType, element);
if (dataTemplate != null)
{
return dataTemplate;
}
}
return null;
}
/// <summary>
/// Find a data-template for the specified type and instance a visual from it.
/// </summary>
public static FrameworkElement InstanceTemplate(Type type, FrameworkElement element, object dataContext)
{
var dataTemplate = FindDataTemplate(type, element);
if (dataTemplate == null)
{
return null;
}
return InstanceTemplate(dataTemplate, dataContext);
}
/// <summary>
/// Instance a visual element from a data template.
/// </summary>
public static FrameworkElement InstanceTemplate(DataTemplate dataTemplate, object dataContext)
{
var element = (FrameworkElement)dataTemplate.LoadContent();
element.DataContext = dataContext;
return element;
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
Software craftsman | Author | Writing rapidfullstackdevelopment.com - Posting about how to survive and flourish as a software developer
Follow on Twitter for news and updates: https://twitter.com/codecapers
I'm writing a new book: Rapid Fullstack Development. Learn from my years of experience and become a better developer.
My second book, Bootstrapping Microservices, is a practical and project-based guide to building distributed applications with microservices.
My first book Data Wrangling with JavaScript is a comprehensive overview of working with data in JavaScript.
Data-Forge Notebook is my notebook-style application for data transformation, analysis and transformation in JavaScript.
I have a long history in software development with many years in apps, web apps, backends, serious games, simulations and VR. Making technology work for business is what I do: building bespoke software solutions that span multiple platforms.
I have years of experience managing development teams, preparing technical strategies and creation of software products. I can explain complicated technology to senior management. I have delivered cutting-edge products in fast-paced and high-pressure environments. I know how to focus and prioritize to get the important things done.
Author
- Rapid Fullstack Development
- Bootstrapping Microservices
- Data Wrangling with JavaScript
Creator of Market Wizard
- https://www.market-wizard.com.au/
Creator of Data-Forge and Data-Forge Notebook
- http://www.data-forge-js.com
- http://www.data-forge-notebook.com
Web
- www.codecapers.com.au
Open source
- https://github.com/ashleydavis
- https://github.com/data-forge
- https://github.com/data-forge-notebook
Skills
- Quickly building MVPs for startups
- Understanding how to get the most out of technology for business
- Developing technical strategies
- Management and coaching of teams & projects
- Microservices, devops, mobile and fullstack software development