<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="/rss.xsl"?><rss version="2.0"><channel><title>ComplexDataTemplates Wiki &amp; Documentation Rss Feed</title><link>http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=Home</link><description>ComplexDataTemplates Wiki Rss Description</description><item><title>Updated Wiki: Home</title><link>http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=Home&amp;version=31</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;WPF&amp;#47;Silverlight enhancements that enable the use of standard HierarchicalDataTemplates and DataTemplates to display complex data hierarchies that contain multiple ItemsSources.  DataTemplate search criteria is expanded to support find by item interface, and&amp;#47;or base type.&lt;br /&gt; &lt;br /&gt;&lt;h2&gt;
Overview
&lt;/h2&gt;The ComplexDataTemplates control library was designed to enhance how the Windows Presentation Foundation uses DataTemplates and HierarchicalDataTemplates to display hierarchical data in a TreeView or other similar controls.  If you are tearing your hair out trying to get data templates and tree views to do something more than displaying the simplest of data hierarchies then this library is for you!  Display TreeView nodes that contain multiple collections without having to rebuild your source data classes.&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;The following is an example of a TreeView control using this control library and standard xaml to display a multi-level dataset with multiple grouping nodes at several levels:&lt;br /&gt; &lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=ComplexDataTemplates&amp;amp;DownloadId=50843" alt="ScreenShot.png" /&gt;&lt;br /&gt; &lt;br /&gt;The above data is based on the following sample type structure:&lt;br /&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;interface&lt;/span&gt; IItem
    {
        &lt;span style="color:#0000FF;"&gt;string&lt;/span&gt; Label { get; }
        &lt;span style="color:#0000FF;"&gt;string&lt;/span&gt; ToolTip { get; }
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;class&lt;/span&gt; Item : IItem
    {
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;string&lt;/span&gt; Label { get; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;string&lt;/span&gt; ToolTip { get; set; }
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;class&lt;/span&gt; ClassA : Item
    {
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; List&amp;lt;ClassB&amp;gt; ListOfClassB { get; &lt;span style="color:#0000FF;"&gt;private&lt;/span&gt; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; List&amp;lt;ClassC&amp;gt; ListOfClassC { get; &lt;span style="color:#0000FF;"&gt;private&lt;/span&gt; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; ClassA()
        {
            &lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;.ListOfClassB = &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; List&amp;lt;ClassB&amp;gt;();
            &lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;.ListOfClassC = &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; List&amp;lt;ClassC&amp;gt;();
        }
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;class&lt;/span&gt; ClassB : Item
    {
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;class&lt;/span&gt; ClassC : Item
    {
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; List&amp;lt;Item&amp;gt; Pickles { get; &lt;span style="color:#0000FF;"&gt;private&lt;/span&gt; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; List&amp;lt;Item&amp;gt; IceCream { get; &lt;span style="color:#0000FF;"&gt;private&lt;/span&gt; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; ClassC()
        {
            &lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;.Pickles = &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; List&amp;lt;Item&amp;gt;();
            &lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;.IceCream = &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; List&amp;lt;Item&amp;gt;();
        }
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;h1&gt;
ComplexGroupDataTemplateSelector
&lt;/h1&gt;The &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; enhances how DataTemplates are found in your application.  In addition to being able to specify data templates for IEnumerable collections, the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; will also find a template based on a interface implemented by the data item or a base type found in the data item hierachy.  Though data templates found in this manner are a little more expensive to perform than just a simple Type lookup,  the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; caches it's resolutions to help reduce the overall performance impact.  The template selector can be tuned for specify needs using a few properties.  For more information please look here: &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt;.&lt;br /&gt; &lt;br /&gt;One of the coolest features that the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; gives you is the ability to select a DataTemplate for an interface implemented by the data item or any base type of the data item.  In the example shown above, all of the leaf nodes of the tree are displayed using one DataTemplate markup with it's DataType property set to &lt;b&gt;DataType=&amp;quot;{x:Type local:IItem}&amp;quot;&lt;/b&gt;,  since IItem is the interface implemented by all of the data items in the example, any data item not explicitly templated will get the default template for the IItem interface.&lt;br /&gt; &lt;br /&gt;The following example shows were the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; can be used in your xaml:&lt;br /&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Class&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;ComplexDataTemplates.UnitTest.Window1&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:x&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:local&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;clr-namespace:ComplexDataTemplates.UnitTest&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:complex&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;clr-namespace:DaisleyHarrison.WPF.ComplexDataTemplates;assembly=ComplexDataTemplates&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;Title&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Window1&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Height&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;300&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Width&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;300&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;complex&lt;/span&gt;:&lt;span style="color:#A31515;"&gt;ComplexGroupDataTemplateSelector&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;complex-group-data-template-selector&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
        ...
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TreeView&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Name&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;testTreeView&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ItemTemplateSelector&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{StaticResource complex-group-data-template-selector}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TreeView&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;h1&gt;
ComplexGroupConverter
&lt;/h1&gt;In order to support the use of multiple ItemsSource bindings we use a combination of the built-in type MultiBinding and the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupConverter&amp;amp;referringTitle=Home"&gt;ComplexGroupConverter&lt;/a&gt; type found in this library.  Note also that for this to work correctly the ItemControl must also use the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt;.&lt;br /&gt; &lt;br /&gt;In the example below you will find two HierarchicalDataTemplates that make use of MultiBinding and the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupConverter&amp;amp;referringTitle=Home"&gt;ComplexGroupConverter&lt;/a&gt;.    The first HierarchicalDataTemplate for DataType=&amp;quot;{x:Type local:ClassA}&amp;quot; binds to two collections in ClassA &amp;quot;ListOfClassB&amp;quot; and &amp;quot;ListOfClassC&amp;quot;.  Since no ConverterParameter is defined the next level templates are found using the keys: &amp;quot;&lt;b&gt;IEnumerable[ClassB]&lt;/b&gt;&amp;quot; and &amp;quot;&lt;b&gt;IEnumerable[ClassC]&lt;/b&gt;&amp;quot; which are automatically generated by the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt;.  For more control of the templates used on the next level and to support more than one collection of the same element type,  the next HierarchicalDataTemplate for DataType=&amp;quot;{x:Type local:ClassC}&amp;quot; also use a ConverterParameter to specific the names of the DataTemplates to be used on the next level.  So support for the &amp;quot;Pickles&amp;quot; collection binding will look for a DataTemplate with &lt;b&gt;x:Key=&amp;quot;Pickles-Template&amp;quot;&lt;/b&gt;.  Support for the &amp;quot;IceCream&amp;quot; collection binding will look for a DataTemplate with &lt;b&gt;x:Key=&amp;quot;IceCream-Template&amp;quot;&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;For more information please look here: &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupConverter&amp;amp;referringTitle=Home"&gt;ComplexGroupConverter&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;The following example shows were the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupConverter&amp;amp;referringTitle=Home"&gt;ComplexGroupConverter&lt;/a&gt; can be used in your xaml:&lt;br /&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Class&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;ComplexDataTemplates.UnitTest.Window1&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:x&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:local&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;clr-namespace:ComplexDataTemplates.UnitTest&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:complex&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;clr-namespace:DaisleyHarrison.WPF.ComplexDataTemplates;assembly=ComplexDataTemplates&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;Title&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Window1&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Height&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;300&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Width&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;300&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;complex&lt;/span&gt;:&lt;span style="color:#A31515;"&gt;ComplexGroupDataTemplateSelector&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;complex-group-data-template-selector&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;complex&lt;/span&gt;:&lt;span style="color:#A31515;"&gt;ComplexGroupConverter&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;complex-group-converter&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;DataType&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{x:Type local:ClassA}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate.ItemsSource&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;MultiBinding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Converter&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{StaticResource complex-group-converter}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Binding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Path&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;ListOfClassB&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Binding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Path&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;ListOfClassC&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;MultiBinding&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate.ItemsSource&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Orientation&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Horizontal&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Image&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Source&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Images/classA.jpg&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;0,5,0,5&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Text&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=Label}&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ToolTip&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=ToolTip}&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;5,0,0,0&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;IEnumerable[ClassB]&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ItemsSource&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=.}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;List of Class Bs&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
         ...
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;DataType&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{x:Type local:ClassC}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate.ItemsSource&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;MultiBinding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Converter&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{StaticResource complex-group-converter}&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ConverterParameter&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Pickles-Template,IceCream-Template&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Binding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Path&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Pickles&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Binding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Path&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;IceCream&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;MultiBinding&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate.ItemsSource&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Orientation&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Horizontal&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Image&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Source&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Images/classC.jpg&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;0,5,0,5&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;5,0,0,0&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;Class C:&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Text&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=Label}&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ToolTip&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=ToolTip}&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;5,0,0,0&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        ...
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TreeView&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Name&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;testTreeView&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ItemTemplateSelector&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{StaticResource complex-group-data-template-selector}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TreeView&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;A complete working example is available in the downloadable source that can be found here: &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Release/ProjectReleases.aspx#ReleaseFiles" class="externalLink"&gt;Released Files&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>aarondh</author><pubDate>Tue, 02 Dec 2008 22:19:24 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20081202101924P</guid></item><item><title>Updated Wiki: Home</title><link>http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=Home&amp;version=30</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;WPF&amp;#47;Silverlight enhancements that enable the use of standard HierarchicalDataTemplates and DataTemplates to display complex data hierarchies that contain multiple ItemsSources.  DataTemplate search criteria is expanded to support find by item interface, and&amp;#47;or base type.&lt;br /&gt; &lt;br /&gt;&lt;h2&gt;
Overview
&lt;/h2&gt;The ComplexDataTemplates control library was designed to enhance how the Windows Presentation Foundation uses DataTemplates and HierarchicalDataTemplates to display hierarchical data in a TreeView or other similar controls.  If you are tearing your hair out trying to get data templates and tree views to do something more than displaying the simplest of data hierarchies then this library is for you!&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;The following is an example of a TreeView control using this control library and standard xaml to display a multi-level dataset with multiple grouping nodes at several levels:&lt;br /&gt; &lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=ComplexDataTemplates&amp;amp;DownloadId=50843" alt="ScreenShot.png" /&gt;&lt;br /&gt; &lt;br /&gt;The above data is based on the following sample type structure:&lt;br /&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;interface&lt;/span&gt; IItem
    {
        &lt;span style="color:#0000FF;"&gt;string&lt;/span&gt; Label { get; }
        &lt;span style="color:#0000FF;"&gt;string&lt;/span&gt; ToolTip { get; }
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;class&lt;/span&gt; Item : IItem
    {
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;string&lt;/span&gt; Label { get; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;string&lt;/span&gt; ToolTip { get; set; }
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;class&lt;/span&gt; ClassA : Item
    {
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; List&amp;lt;ClassB&amp;gt; ListOfClassB { get; &lt;span style="color:#0000FF;"&gt;private&lt;/span&gt; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; List&amp;lt;ClassC&amp;gt; ListOfClassC { get; &lt;span style="color:#0000FF;"&gt;private&lt;/span&gt; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; ClassA()
        {
            &lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;.ListOfClassB = &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; List&amp;lt;ClassB&amp;gt;();
            &lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;.ListOfClassC = &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; List&amp;lt;ClassC&amp;gt;();
        }
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;class&lt;/span&gt; ClassB : Item
    {
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;class&lt;/span&gt; ClassC : Item
    {
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; List&amp;lt;Item&amp;gt; Pickles { get; &lt;span style="color:#0000FF;"&gt;private&lt;/span&gt; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; List&amp;lt;Item&amp;gt; IceCream { get; &lt;span style="color:#0000FF;"&gt;private&lt;/span&gt; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; ClassC()
        {
            &lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;.Pickles = &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; List&amp;lt;Item&amp;gt;();
            &lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;.IceCream = &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; List&amp;lt;Item&amp;gt;();
        }
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;h1&gt;
ComplexGroupDataTemplateSelector
&lt;/h1&gt;The &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; enhances how DataTemplates are found in your application.  In addition to being able to specify data templates for IEnumerable collections, the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; will also find a template based on a interface implemented by the data item or a base type found in the data item hierachy.  Though data templates found in this manner are a little more expensive to perform than just a simple Type lookup,  the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; caches it's resolutions to help reduce the overall performance impact.  The template selector can be tuned for specify needs using a few properties.  For more information please look here: &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt;.&lt;br /&gt; &lt;br /&gt;One of the coolest features that the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; gives you is the ability to select a DataTemplate for an interface implemented by the data item or any base type of the data item.  In the example shown above, all of the leaf nodes of the tree are displayed using one DataTemplate markup with it's DataType property set to &lt;b&gt;DataType=&amp;quot;{x:Type local:IItem}&amp;quot;&lt;/b&gt;,  since IItem is the interface implemented by all of the data items in the example, any data item not explicitly templated will get the default template for the IItem interface.&lt;br /&gt; &lt;br /&gt;The following example shows were the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; can be used in your xaml:&lt;br /&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Class&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;ComplexDataTemplates.UnitTest.Window1&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:x&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:local&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;clr-namespace:ComplexDataTemplates.UnitTest&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:complex&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;clr-namespace:DaisleyHarrison.WPF.ComplexDataTemplates;assembly=ComplexDataTemplates&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;Title&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Window1&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Height&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;300&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Width&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;300&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;complex&lt;/span&gt;:&lt;span style="color:#A31515;"&gt;ComplexGroupDataTemplateSelector&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;complex-group-data-template-selector&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
        ...
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TreeView&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Name&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;testTreeView&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ItemTemplateSelector&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{StaticResource complex-group-data-template-selector}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TreeView&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;h1&gt;
ComplexGroupConverter
&lt;/h1&gt;In order to support the use of multiple ItemsSource bindings we use a combination of the built-in type MultiBinding and the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupConverter&amp;amp;referringTitle=Home"&gt;ComplexGroupConverter&lt;/a&gt; type found in this library.  Note also that for this to work correctly the ItemControl must also use the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt;.&lt;br /&gt; &lt;br /&gt;In the example below you will find two HierarchicalDataTemplates that make use of MultiBinding and the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupConverter&amp;amp;referringTitle=Home"&gt;ComplexGroupConverter&lt;/a&gt;.    The first HierarchicalDataTemplate for DataType=&amp;quot;{x:Type local:ClassA}&amp;quot; binds to two collections in ClassA &amp;quot;ListOfClassB&amp;quot; and &amp;quot;ListOfClassC&amp;quot;.  Since no ConverterParameter is defined the next level templates are found using the keys: &amp;quot;&lt;b&gt;IEnumerable[ClassB]&lt;/b&gt;&amp;quot; and &amp;quot;&lt;b&gt;IEnumerable[ClassC]&lt;/b&gt;&amp;quot; which are automatically generated by the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt;.  For more control of the templates used on the next level and to support more than one collection of the same element type,  the next HierarchicalDataTemplate for DataType=&amp;quot;{x:Type local:ClassC}&amp;quot; also use a ConverterParameter to specific the names of the DataTemplates to be used on the next level.  So support for the &amp;quot;Pickles&amp;quot; collection binding will look for a DataTemplate with &lt;b&gt;x:Key=&amp;quot;Pickles-Template&amp;quot;&lt;/b&gt;.  Support for the &amp;quot;IceCream&amp;quot; collection binding will look for a DataTemplate with &lt;b&gt;x:Key=&amp;quot;IceCream-Template&amp;quot;&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;For more information please look here: &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupConverter&amp;amp;referringTitle=Home"&gt;ComplexGroupConverter&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;The following example shows were the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupConverter&amp;amp;referringTitle=Home"&gt;ComplexGroupConverter&lt;/a&gt; can be used in your xaml:&lt;br /&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Class&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;ComplexDataTemplates.UnitTest.Window1&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:x&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:local&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;clr-namespace:ComplexDataTemplates.UnitTest&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:complex&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;clr-namespace:DaisleyHarrison.WPF.ComplexDataTemplates;assembly=ComplexDataTemplates&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;Title&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Window1&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Height&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;300&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Width&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;300&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;complex&lt;/span&gt;:&lt;span style="color:#A31515;"&gt;ComplexGroupDataTemplateSelector&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;complex-group-data-template-selector&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;complex&lt;/span&gt;:&lt;span style="color:#A31515;"&gt;ComplexGroupConverter&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;complex-group-converter&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;DataType&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{x:Type local:ClassA}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate.ItemsSource&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;MultiBinding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Converter&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{StaticResource complex-group-converter}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Binding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Path&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;ListOfClassB&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Binding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Path&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;ListOfClassC&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;MultiBinding&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate.ItemsSource&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Orientation&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Horizontal&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Image&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Source&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Images/classA.jpg&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;0,5,0,5&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Text&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=Label}&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ToolTip&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=ToolTip}&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;5,0,0,0&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;IEnumerable[ClassB]&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ItemsSource&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=.}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;List of Class Bs&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
         ...
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;DataType&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{x:Type local:ClassC}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate.ItemsSource&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;MultiBinding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Converter&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{StaticResource complex-group-converter}&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ConverterParameter&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Pickles-Template,IceCream-Template&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Binding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Path&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Pickles&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Binding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Path&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;IceCream&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;MultiBinding&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate.ItemsSource&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Orientation&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Horizontal&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Image&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Source&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Images/classC.jpg&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;0,5,0,5&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;5,0,0,0&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;Class C:&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Text&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=Label}&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ToolTip&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=ToolTip}&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;5,0,0,0&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        ...
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TreeView&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Name&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;testTreeView&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ItemTemplateSelector&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{StaticResource complex-group-data-template-selector}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TreeView&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;A complete working example is available in the downloadable source that can be found here: &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Release/ProjectReleases.aspx#ReleaseFiles" class="externalLink"&gt;Released Files&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>aarondh</author><pubDate>Tue, 02 Dec 2008 21:51:31 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20081202095131P</guid></item><item><title>Updated Wiki: Home</title><link>http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=Home&amp;version=29</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;WPF&amp;#47;Silverlight enhancements that enable the use of standard HierarchicalDataTemplates and DataTemplates to display complex data hierarchies that contain multiple ItemsSources.  DataTemplate search criteria is expanded to support find by item interface, and&amp;#47;or base type.&lt;br /&gt; &lt;br /&gt;&lt;h2&gt;
Overview
&lt;/h2&gt;The ComplexDataTemplates control library was designed to enhance how the Windows Presentation Foundation uses DataTemplates and HierarchicalDataTemplates to display hierarchical data in a TreeView or other similar controls.  If you are tearing your hair out trying to get data templates and tree views to do something more than displaying the simplest of data hierarchies then this library is for you!&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;The following is an example of a TreeView control using this control library and standard xaml to display a multi-level dataset with multiple grouping nodes at several levels:&lt;br /&gt; &lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=ComplexDataTemplates&amp;amp;DownloadId=50843" alt="ScreenShot.png" /&gt;&lt;br /&gt; &lt;br /&gt;The above data is based on the following sample type structure:&lt;br /&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;interface&lt;/span&gt; IItem
    {
        &lt;span style="color:#0000FF;"&gt;string&lt;/span&gt; Label { get; }
        &lt;span style="color:#0000FF;"&gt;string&lt;/span&gt; ToolTip { get; }
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;class&lt;/span&gt; Item : IItem
    {
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;string&lt;/span&gt; Label { get; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;string&lt;/span&gt; ToolTip { get; set; }
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;class&lt;/span&gt; ClassA : Item
    {
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; List&amp;lt;ClassB&amp;gt; ListOfClassB { get; &lt;span style="color:#0000FF;"&gt;private&lt;/span&gt; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; List&amp;lt;ClassC&amp;gt; ListOfClassC { get; &lt;span style="color:#0000FF;"&gt;private&lt;/span&gt; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; ClassA()
        {
            &lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;.ListOfClassB = &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; List&amp;lt;ClassB&amp;gt;();
            &lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;.ListOfClassC = &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; List&amp;lt;ClassC&amp;gt;();
        }
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;class&lt;/span&gt; ClassB : Item
    {
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;class&lt;/span&gt; ClassC : Item
    {
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; List&amp;lt;Item&amp;gt; Pickles { get; &lt;span style="color:#0000FF;"&gt;private&lt;/span&gt; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; List&amp;lt;Item&amp;gt; IceCream { get; &lt;span style="color:#0000FF;"&gt;private&lt;/span&gt; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; ClassC()
        {
            &lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;.Pickles = &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; List&amp;lt;Item&amp;gt;();
            &lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;.IceCream = &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; List&amp;lt;Item&amp;gt;();
        }
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;h1&gt;
ComplexGroupDataTemplateSelector
&lt;/h1&gt;The &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; enhances how DataTemplates are found in your application.  In addition to being able to specify data templates for IEnumerable collections, the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; will also find a template based on a interface implemented by the data item or a base type found in the data item hierachy.  Though data templates found in this manner are a little more expensive to perform than just a simple Type lookup,  the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; caches it's resolutions to help reduce the overall performance impact.  The template selector can be tuned for specify needs using a few properties.  For more information please look here: &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt;.&lt;br /&gt; &lt;br /&gt;One of the coolest features that the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; gives you is the ability to select a DataTemplate for an interface implemented by the data item or any base type of the data item.  In the example shown above, all of the leaf nodes of the tree are displayed using one DataTemplate markup with it's DataType property set to &lt;b&gt;DataType=&amp;quot;{x:Type local:IItem}&amp;quot;&lt;/b&gt;,  since IItem is the interface implemented by all of the data items in the example, any data item not explicitly templated will get the default template for the IItem interface.&lt;br /&gt; &lt;br /&gt;The following example shows were the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; can be used in your xaml:&lt;br /&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Class&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;ComplexDataTemplates.UnitTest.Window1&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:x&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:local&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;clr-namespace:ComplexDataTemplates.UnitTest&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:complex&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;clr-namespace:DaisleyHarrison.WPF.ComplexDataTemplates;assembly=ComplexDataTemplates&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;Title&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Window1&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Height&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;300&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Width&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;300&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;complex&lt;/span&gt;:&lt;span style="color:#A31515;"&gt;ComplexGroupDataTemplateSelector&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;complex-group-data-template-selector&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
        ...
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TreeView&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Name&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;testTreeView&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ItemTemplateSelector&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{StaticResource complex-group-data-template-selector}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TreeView&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;h1&gt;
ComplexGroupConverter
&lt;/h1&gt;In order to support the use of multiple ItemsSource bindings we use a combination of the built-in type MultiBinding and the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupConverter&amp;amp;referringTitle=Home"&gt;ComplexGroupConverter&lt;/a&gt; type found in this library.  Note also that for this to work correctly the ItemControl must also use the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt;.&lt;br /&gt; &lt;br /&gt;In the example below you will find two HierarchicalDataTemplates that make use of MultiBinding and the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupConverter&amp;amp;referringTitle=Home"&gt;ComplexGroupConverter&lt;/a&gt;.    The first HierarchicalDataTemplate for DataType=&amp;quot;{x:Type local:ClassA}&amp;quot; binds to two collections in ClassA &amp;quot;ListOfClassB&amp;quot; and &amp;quot;ListOfClassC&amp;quot;.  Since no ConverterParameter is defined the next level templates are found using the keys: &amp;quot;&lt;b&gt;IEnumerable[ClassB]&lt;/b&gt;&amp;quot; and &amp;quot;&lt;b&gt;IEnumerable[ClassC]&lt;/b&gt;&amp;quot; which are automatically generated by the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt;.  For more control of the templates used on the next level and to support more than one collection of the same element type,  the next HierarchicalDataTemplate for DataType=&amp;quot;{x:Type local:ClassC}&amp;quot; also use a ConverterParameter to specific the names of the DataTemplates to be used on the next level.  So support for the &amp;quot;Pickles&amp;quot; collection binding will look for a DataTemplate with &lt;b&gt;x:Key=&amp;quot;Pickles-Template&amp;quot;&lt;/b&gt;.  Support for the &amp;quot;IceCream&amp;quot; collection binding will look for a DataTemplate with &lt;b&gt;x:Key=&amp;quot;IceCream-Template&amp;quot;&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;For more information please look here: &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupConverter&amp;amp;referringTitle=Home"&gt;ComplexGroupConverter&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;The following example shows were the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupConverter&amp;amp;referringTitle=Home"&gt;ComplexGroupConverter&lt;/a&gt; can be used in your xaml:&lt;br /&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Class&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;ComplexDataTemplates.UnitTest.Window1&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:x&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:local&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;clr-namespace:ComplexDataTemplates.UnitTest&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:complex&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;clr-namespace:DaisleyHarrison.WPF.ComplexDataTemplates;assembly=ComplexDataTemplates&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;Title&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Window1&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Height&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;300&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Width&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;300&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;complex&lt;/span&gt;:&lt;span style="color:#A31515;"&gt;ComplexGroupDataTemplateSelector&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;complex-group-data-template-selector&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;complex&lt;/span&gt;:&lt;span style="color:#A31515;"&gt;ComplexGroupConverter&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;complex-group-converter&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;DataType&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{x:Type local:ClassA}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate.ItemsSource&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;MultiBinding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Converter&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{StaticResource complex-group-converter}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Binding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Path&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;ListOfClassB&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Binding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Path&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;ListOfClassC&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;MultiBinding&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate.ItemsSource&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Orientation&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Horizontal&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Image&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Source&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Images/classA.jpg&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;0,5,0,5&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Text&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=Label}&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ToolTip&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=ToolTip}&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;5,0,0,0&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;IEnumerable[ClassB]&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ItemsSource&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=.}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;List of Class Bs&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
         ...
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;DataType&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{x:Type local:ClassC}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate.ItemsSource&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;MultiBinding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Converter&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{StaticResource complex-group-converter}&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ConverterParameter&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Pickles-Template,IceCream-Template&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Binding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Path&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Pickles&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Binding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Path&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;IceCream&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;MultiBinding&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate.ItemsSource&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Orientation&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Horizontal&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Image&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Source&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Images/classC.jpg&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;0,5,0,5&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;5,0,0,0&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;Class C:&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Text&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=Label}&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ToolTip&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=ToolTip}&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;5,0,0,0&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        ...
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TreeView&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Name&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;testTreeView&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ItemTemplateSelector&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{StaticResource complex-group-data-template-selector}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TreeView&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;A complete working example is available in the downloadable source that can be found here: &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Release/ProjectReleases.aspx#ReleaseFiles" class="externalLink"&gt;Released Files&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>aarondh</author><pubDate>Tue, 02 Dec 2008 21:50:49 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20081202095049P</guid></item><item><title>Updated Wiki: Home</title><link>http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=Home&amp;version=28</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;The ComplexDataTemplates project cointains helper classes for enabling the use of HierarchicalDataTemplates to represent more complex data hierarchies that contain multiple ItemsSources.  DataTemplate search criteria is expanded to support find by interface and&amp;#47;or base type.&lt;br /&gt; &lt;br /&gt;&lt;h2&gt;
Overview
&lt;/h2&gt;The ComplexDataTemplates control library was designed to enhance how the Windows Presentation Foundation uses DataTemplates and HierarchicalDataTemplates to display hierarchical data in a TreeView or other similar controls.  If you are tearing your hair out trying to get data templates and tree views to do something more than displaying the simplest of data hierarchies then this library is for you!&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;The following is an example of a TreeView control using this control library and standard xaml to display a multi-level dataset with multiple grouping nodes at several levels:&lt;br /&gt; &lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=ComplexDataTemplates&amp;amp;DownloadId=50713" alt="ScreenShot.jpg" /&gt;&lt;br /&gt; &lt;br /&gt;The above data is based on the following sample type structure:&lt;br /&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;interface&lt;/span&gt; IItem
    {
        &lt;span style="color:#0000FF;"&gt;string&lt;/span&gt; Label { get; }
        &lt;span style="color:#0000FF;"&gt;string&lt;/span&gt; ToolTip { get; }
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;class&lt;/span&gt; Item : IItem
    {
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;string&lt;/span&gt; Label { get; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;string&lt;/span&gt; ToolTip { get; set; }
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;class&lt;/span&gt; ClassA : Item
    {
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; List&amp;lt;ClassB&amp;gt; ListOfClassB { get; &lt;span style="color:#0000FF;"&gt;private&lt;/span&gt; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; List&amp;lt;ClassC&amp;gt; ListOfClassC { get; &lt;span style="color:#0000FF;"&gt;private&lt;/span&gt; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; ClassA()
        {
            &lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;.ListOfClassB = &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; List&amp;lt;ClassB&amp;gt;();
            &lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;.ListOfClassC = &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; List&amp;lt;ClassC&amp;gt;();
        }
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;class&lt;/span&gt; ClassB : Item
    {
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;class&lt;/span&gt; ClassC : Item
    {
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; List&amp;lt;Item&amp;gt; Pickles { get; &lt;span style="color:#0000FF;"&gt;private&lt;/span&gt; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; List&amp;lt;Item&amp;gt; IceCream { get; &lt;span style="color:#0000FF;"&gt;private&lt;/span&gt; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; ClassC()
        {
            &lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;.Pickles = &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; List&amp;lt;Item&amp;gt;();
            &lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;.IceCream = &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; List&amp;lt;Item&amp;gt;();
        }
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;h1&gt;
ComplexGroupDataTemplateSelector
&lt;/h1&gt;The &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; enhances how DataTemplates are found in your application.  In addition to being able to specify data templates for IEnumerable collections, the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; will also find a template based on a interface implemented by the data item or a base type found in the data item hierachy.  Though data templates found in this manner are a little more expensive to perform than just a simple Type lookup,  the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; caches it's resolutions to help reduce the overall performance impact.  The template selector can be tuned for specify needs using a few properties.  For more information please look here: &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt;.&lt;br /&gt; &lt;br /&gt;One of the coolest features that the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; gives you is the ability to select a DataTemplate for an interface implemented by the data item or any base type of the data item.  In the example shown above, all of the leaf nodes of the tree are displayed using one DataTemplate markup with it's DataType property set to &lt;b&gt;DataType=&amp;quot;{x:Type local:IItem}&amp;quot;&lt;/b&gt;,  since IItem is the interface implemented by all of the data items in the example, any data item not explicitly templated will get the default template for the IItem interface.&lt;br /&gt; &lt;br /&gt;The following example shows were the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; can be used in your xaml:&lt;br /&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Class&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;ComplexDataTemplates.UnitTest.Window1&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:x&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:local&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;clr-namespace:ComplexDataTemplates.UnitTest&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:complex&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;clr-namespace:DaisleyHarrison.WPF.ComplexDataTemplates;assembly=ComplexDataTemplates&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;Title&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Window1&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Height&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;300&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Width&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;300&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;complex&lt;/span&gt;:&lt;span style="color:#A31515;"&gt;ComplexGroupDataTemplateSelector&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;complex-group-data-template-selector&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
        ...
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TreeView&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Name&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;testTreeView&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ItemTemplateSelector&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{StaticResource complex-group-data-template-selector}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TreeView&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;h1&gt;
ComplexGroupConverter
&lt;/h1&gt;In order to support the use of multiple ItemsSource bindings we use a combination of the built-in type MultiBinding and the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupConverter&amp;amp;referringTitle=Home"&gt;ComplexGroupConverter&lt;/a&gt; type found in this library.  Note also that for this to work correctly the ItemControl must also use the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt;.&lt;br /&gt; &lt;br /&gt;In the example below you will find two HierarchicalDataTemplates that make use of MultiBinding and the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupConverter&amp;amp;referringTitle=Home"&gt;ComplexGroupConverter&lt;/a&gt;.    The first HierarchicalDataTemplate for DataType=&amp;quot;{x:Type local:ClassA}&amp;quot; binds to two collections in ClassA &amp;quot;ListOfClassB&amp;quot; and &amp;quot;ListOfClassC&amp;quot;.  Since no ConverterParameter is defined the next level templates are found using the keys: &amp;quot;&lt;b&gt;IEnumerable[ClassB]&lt;/b&gt;&amp;quot; and &amp;quot;&lt;b&gt;IEnumerable[ClassC]&lt;/b&gt;&amp;quot; which are automatically generated by the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt;.  For more control of the templates used on the next level and to support more than one collection of the same element type,  the next HierarchicalDataTemplate for DataType=&amp;quot;{x:Type local:ClassC}&amp;quot; also use a ConverterParameter to specific the names of the DataTemplates to be used on the next level.  So support for the &amp;quot;Pickles&amp;quot; collection binding will look for a DataTemplate with &lt;b&gt;x:Key=&amp;quot;Pickles-Template&amp;quot;&lt;/b&gt;.  Support for the &amp;quot;IceCream&amp;quot; collection binding will look for a DataTemplate with &lt;b&gt;x:Key=&amp;quot;IceCream-Template&amp;quot;&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;For more information please look here: &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupConverter&amp;amp;referringTitle=Home"&gt;ComplexGroupConverter&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;The following example shows were the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupConverter&amp;amp;referringTitle=Home"&gt;ComplexGroupConverter&lt;/a&gt; can be used in your xaml:&lt;br /&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Class&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;ComplexDataTemplates.UnitTest.Window1&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:x&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:local&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;clr-namespace:ComplexDataTemplates.UnitTest&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:complex&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;clr-namespace:DaisleyHarrison.WPF.ComplexDataTemplates;assembly=ComplexDataTemplates&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;Title&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Window1&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Height&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;300&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Width&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;300&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;complex&lt;/span&gt;:&lt;span style="color:#A31515;"&gt;ComplexGroupDataTemplateSelector&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;complex-group-data-template-selector&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;complex&lt;/span&gt;:&lt;span style="color:#A31515;"&gt;ComplexGroupConverter&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;complex-group-converter&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;DataType&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{x:Type local:ClassA}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate.ItemsSource&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;MultiBinding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Converter&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{StaticResource complex-group-converter}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Binding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Path&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;ListOfClassB&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Binding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Path&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;ListOfClassC&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;MultiBinding&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate.ItemsSource&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Orientation&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Horizontal&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Image&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Source&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Images/classA.jpg&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;0,5,0,5&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Text&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=Label}&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ToolTip&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=ToolTip}&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;5,0,0,0&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;IEnumerable[ClassB]&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ItemsSource&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=.}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;List of Class Bs&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
         ...
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;DataType&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{x:Type local:ClassC}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate.ItemsSource&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;MultiBinding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Converter&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{StaticResource complex-group-converter}&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ConverterParameter&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Pickles-Template,IceCream-Template&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Binding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Path&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Pickles&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Binding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Path&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;IceCream&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;MultiBinding&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate.ItemsSource&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Orientation&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Horizontal&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Image&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Source&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Images/classC.jpg&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;0,5,0,5&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;5,0,0,0&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;Class C:&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Text&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=Label}&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ToolTip&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=ToolTip}&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;5,0,0,0&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        ...
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TreeView&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Name&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;testTreeView&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ItemTemplateSelector&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{StaticResource complex-group-data-template-selector}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TreeView&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;A complete working example is available in the downloadable source that can be found here: &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Release/ProjectReleases.aspx#ReleaseFiles" class="externalLink"&gt;Released Files&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>aarondh</author><pubDate>Mon, 01 Dec 2008 16:52:34 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20081201045234P</guid></item><item><title>Updated Wiki: ComplexGroupConverter</title><link>http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupConverter&amp;version=9</link><description>&lt;div class="wikidoc"&gt;
&lt;h1&gt;
ComplexGroupConverter
&lt;/h1&gt; &lt;br /&gt;The ComplexGroupConverter works in conjunction with the MultiBinding markup to allow you to specify a binding to multiple collections,  each collection is treated as a unique data item on the next level of the hierarchy, allowing you to specify HierarchicalDataTemplate markup to format a unique look for each collection.&lt;br /&gt; &lt;br /&gt;The following is an example of the use of the ComplexGroupConverter:&lt;br /&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:x&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:complex&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;clr-namespace:DaisleyHarrison.WPF.ComplexDataTemplates;assembly=ComplexDataTemplates&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;complex&lt;/span&gt;:&lt;span style="color:#A31515;"&gt;ComplexGroupConverter&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;complex-group-converter&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
...
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;DataType&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{x:Type local:ClassA}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate.ItemsSource&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;MultiBinding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Converter&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{StaticResource complex-group-converter}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Binding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Path&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;ListOfClassB&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Binding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Path&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;ListOfClassC&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;MultiBinding&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate.ItemsSource&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Orientation&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Horizontal&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Image&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Source&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Images/classA.jpg&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;0,5,0,5&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Text&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=Label}&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ToolTip&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=ToolTip}&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;5,0,0,0&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
...
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;In the above example,  the next level of the hierarchy could be formated with the following HeirarchicalDataTemplate markup:&lt;br /&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
...
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;IEnumerable[ClassB]&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ItemsSource&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=.}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;List of Class Bs&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;IEnumerable[ClassC]&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ItemsSource&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=.}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;List of Class Cs&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
...
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;Note that the resource keys used are create by the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=ComplexGroupConverter"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; using the string format expression from the GroupDataTemplateFormat property.&lt;br /&gt; &lt;br /&gt;If you would like more control of the resource keys used on the next level you can specify the key names in the ConverterParameter property.  This is a comma delimited list of resource key names. There should be one resource key name specified for each Binding in the MultiBinding markup.  &lt;br /&gt;For example:&lt;br /&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
...
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;DataType&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{x:Type local:ClassC}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate.ItemsSource&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;MultiBinding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Converter&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{StaticResource complex-group-converter}&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ConverterParameter&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Pickles-Template,IceCream-Template&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Binding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Path&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Pickles&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Binding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Path&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;IceCream&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;MultiBinding&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate.ItemsSource&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Orientation&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Horizontal&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Image&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Source&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Images/classC.jpg&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;0,5,0,5&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;5,0,0,0&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;Class C:&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Text&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=Label}&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ToolTip&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=ToolTip}&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;5,0,0,0&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
...
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;In the above example,  the next level of the hierarchy could be formated with the following HeiarchicalDataTemplate markup:&lt;br /&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
...
         &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Pickles-Template&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ItemsSource&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=.}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;Pickles&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;IceCream-Template&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ItemsSource&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=.}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;Ice Cream&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
...
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;
&lt;/div&gt;</description><author>aarondh</author><pubDate>Mon, 01 Dec 2008 03:18:07 GMT</pubDate><guid isPermaLink="false">Updated Wiki: ComplexGroupConverter 20081201031807A</guid></item><item><title>Updated Wiki: ComplexGroupDataTemplateSelector</title><link>http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;version=14</link><description>&lt;div class="wikidoc"&gt;
&lt;h1&gt;
ComplexGroupDataTemplateSelector
&lt;/h1&gt;The ComplexGroupDataTemplateSelector enhances how DataTemplates are found in your application. In addition to being able to specify data templates for IEnumerable collections, the ComplexGroupDataTemplateSelector will also find a template based on a interface implemented by the data item or a base type found in the data item hierarchy. Though data templates found in this manner are a little more expensive to perform than just a simple Type lookup, the ComplexGroupDataTemplateSelector caches it's resolutions to help reduce the overall performance impact. The template selector can be tuned for specific needs using a few properties.&lt;br /&gt;&lt;h2&gt;
DiscoveryMethod Property
&lt;/h2&gt; &lt;br /&gt;The default setting for the &lt;b&gt;DiscoveryMethod&lt;/b&gt; property is &amp;quot;&lt;b&gt;Key&lt;/b&gt;, &lt;b&gt;Type&lt;/b&gt;, &lt;b&gt;Interface&lt;/b&gt;, &lt;b&gt;Hierarchy&lt;/b&gt;&amp;quot;&lt;br /&gt;The DiscoveryMethod is a enum flag property in which the following flags can be set:&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&lt;b&gt;Key&lt;/b&gt;  Flag &lt;br /&gt;Find the DataTemplate by creating a resource key using the string format expression found in TemplateKeyFormat or GroupTemplateKeyFormat.&lt;br /&gt; &lt;br /&gt;&lt;b&gt;Type&lt;/b&gt; Flag &lt;br /&gt;Find the DataTemplate by looking up the item Type for a template with a matching DataType property.  This is the default way the DataTempates are found without using the ComplexGroupDataTemplateSelector.&lt;br /&gt; &lt;br /&gt;&lt;b&gt;Interface&lt;/b&gt; Flag &lt;br /&gt;Find the DataTemplate by looking up each interface implemented by the item type for a template with a matching DataType property.&lt;br /&gt; &lt;br /&gt;&lt;b&gt;Hierarchy&lt;/b&gt;  Flag &lt;br /&gt;Scan the item types type hierarchy to find the DataTemplate based on it's DataType property.&lt;br /&gt; &lt;br /&gt;&lt;b&gt;GeneralToSpecific&lt;/b&gt;  Flag &lt;br /&gt; &lt;br /&gt;&lt;b&gt;FullTypeName&lt;/b&gt; Flag &lt;br /&gt;Use the full type name when creating a resource key using the string format of either TemplateKeyFormat or GroupTemplateKeyFormat&lt;br /&gt;If not set the unqualified type name will be used. The default is to use the unqualified type name.&lt;br /&gt; &lt;br /&gt;For example:&lt;br /&gt; &lt;br /&gt;When not set, the resource key created for type DaisleyHarrison.WPF.ComplexDataTemplates.UnitTest.ClassA would be &lt;b&gt;data-template[ClassA]&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;When FullTypeName is set,  the resource key created for type DaisleyHarrison.WPF.ComplexDataTemplates.UnitTest.ClassA would be &lt;b&gt;data-template[DaisleyHarrison.WPF.ComplexDataTemplates.UnitTest.ClassA]&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;&lt;b&gt;NoCache&lt;/b&gt; Flag&lt;br /&gt;Does not cache the result of the resource search.  Fources the DataTemplate to be looked up for each item.  The default is to cache all DataTemplate lookups so that a DataTemplate is found only once for each unique item Type.  This flag is used primarily for debugging.&lt;br /&gt;Note: using this flag can impact performance.&lt;br /&gt; &lt;br /&gt;&lt;h2&gt;
TemplateKeyFormat  Property
&lt;/h2&gt; &lt;br /&gt;The TemplateKeyFormat property is the string format expression used to create a resource key for non-collection items.  That is all items that do not implement the  &lt;b&gt;IEnumerable&lt;/b&gt; interface.&lt;br /&gt; &lt;br /&gt;The default value for the TemplateKeyFormat property is &amp;quot;&lt;b&gt;data-template[{0}]&lt;/b&gt;&amp;quot;.&lt;br /&gt; &lt;br /&gt;&lt;h2&gt;
GroupTemplateKeyFormat  Property
&lt;/h2&gt; &lt;br /&gt;The GroupTemplateKeyFormat  property is the string format expression used to create a resource key for all collection items.  That is all items that implement the  &lt;b&gt;IEnumerable&lt;/b&gt; interface.&lt;br /&gt; &lt;br /&gt;The default value for the TemplateKeyFormat property is &amp;quot;&lt;b&gt;IEnumerable[{0}]&lt;/b&gt;&amp;quot;.&lt;br /&gt;
&lt;/div&gt;</description><author>aarondh</author><pubDate>Mon, 01 Dec 2008 03:16:53 GMT</pubDate><guid isPermaLink="false">Updated Wiki: ComplexGroupDataTemplateSelector 20081201031653A</guid></item><item><title>Updated Wiki: Home</title><link>http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=Home&amp;version=27</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;The ComplexDataTemplates project cointains helper classes for enabling the use of HierarchicalDataTemplates to represent more complex data hierarchie that contain multiple ItemsSources.  DataTemplate search criteria is expanded to support find by interface and&amp;#47;or base type.&lt;br /&gt; &lt;br /&gt;&lt;h2&gt;
Overview
&lt;/h2&gt;The ComplexDataTemplates control library was designed to enhance how the Windows Presentation Foundation uses DataTemplates and HierarchicalDataTemplates to display hierarchical data in a TreeView or other similar controls.  If you are tearing your hair out trying to get a TreeView to some more that the simplest of data hierarchies then this library is for you!&lt;br /&gt; &lt;br /&gt;The following is an example of a TreeView control using this control library and standard xaml to display a multi-level dataset with multiple grouping nodes at several levels:&lt;br /&gt; &lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=ComplexDataTemplates&amp;amp;DownloadId=50713" alt="ScreenShot.jpg" /&gt;&lt;br /&gt; &lt;br /&gt;The above data is based on the following sample type structure:&lt;br /&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;interface&lt;/span&gt; IItem
    {
        &lt;span style="color:#0000FF;"&gt;string&lt;/span&gt; Label { get; }
        &lt;span style="color:#0000FF;"&gt;string&lt;/span&gt; ToolTip { get; }
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;class&lt;/span&gt; Item : IItem
    {
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;string&lt;/span&gt; Label { get; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;string&lt;/span&gt; ToolTip { get; set; }
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;class&lt;/span&gt; ClassA : Item
    {
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; List&amp;lt;ClassB&amp;gt; ListOfClassB { get; &lt;span style="color:#0000FF;"&gt;private&lt;/span&gt; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; List&amp;lt;ClassC&amp;gt; ListOfClassC { get; &lt;span style="color:#0000FF;"&gt;private&lt;/span&gt; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; ClassA()
        {
            &lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;.ListOfClassB = &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; List&amp;lt;ClassB&amp;gt;();
            &lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;.ListOfClassC = &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; List&amp;lt;ClassC&amp;gt;();
        }
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;class&lt;/span&gt; ClassB : Item
    {
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;class&lt;/span&gt; ClassC : Item
    {
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; List&amp;lt;Item&amp;gt; Pickles { get; &lt;span style="color:#0000FF;"&gt;private&lt;/span&gt; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; List&amp;lt;Item&amp;gt; IceCream { get; &lt;span style="color:#0000FF;"&gt;private&lt;/span&gt; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; ClassC()
        {
            &lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;.Pickles = &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; List&amp;lt;Item&amp;gt;();
            &lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;.IceCream = &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; List&amp;lt;Item&amp;gt;();
        }
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;h1&gt;
ComplexGroupDataTemplateSelector
&lt;/h1&gt;The &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; enhances how DataTemplates are found in your application.  In addition to being able to specify data templates for IEnumerable collections, the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; will also find a template based on a interface implemented by the data item or a base type found in the data item hierachy.  Though data templates found in this manner are a little more expensive to perform than just a simple Type lookup,  the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; caches it's resolutions to help reduce the overall performance impact.  The template selector can be tuned for specify needs using a few properties.  For more information please look here: &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt;.&lt;br /&gt; &lt;br /&gt;One of the coolest features that the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; gives you is the ability to select a DataTemplate for an interface implemented by the data item or any base type of the data item.  In the example shown above, all of the leaf nodes of the tree are displayed using one DataTemplate markup with it's DataType property set to &lt;b&gt;DataType=&amp;quot;{x:Type local:IItem}&amp;quot;&lt;/b&gt;,  since IItem is the interface implemented by all of the data items in the example, any data item not explicitly templated will get the default template for the IItem interface.&lt;br /&gt; &lt;br /&gt;The following example shows were the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; can be used in your xaml:&lt;br /&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Class&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;ComplexDataTemplates.UnitTest.Window1&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:x&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:local&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;clr-namespace:ComplexDataTemplates.UnitTest&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:complex&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;clr-namespace:DaisleyHarrison.WPF.ComplexDataTemplates;assembly=ComplexDataTemplates&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;Title&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Window1&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Height&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;300&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Width&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;300&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;complex&lt;/span&gt;:&lt;span style="color:#A31515;"&gt;ComplexGroupDataTemplateSelector&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;complex-group-data-template-selector&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
        ...
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TreeView&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Name&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;testTreeView&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ItemTemplateSelector&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{StaticResource complex-group-data-template-selector}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TreeView&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;h1&gt;
ComplexGroupConverter
&lt;/h1&gt;In order to support the use of multiple ItemsSource bindings we use a combination of the built-in type MultiBinding and the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupConverter&amp;amp;referringTitle=Home"&gt;ComplexGroupConverter&lt;/a&gt; type found in this library.  Note also that for this to work correctly the ItemControl must also use the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt;.&lt;br /&gt; &lt;br /&gt;In the example below you will find two HierarchicalDataTemplates that make use of MultiBinding and the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupConverter&amp;amp;referringTitle=Home"&gt;ComplexGroupConverter&lt;/a&gt;.    The first HierarchicalDataTemplate for DataType=&amp;quot;{x:Type local:ClassA}&amp;quot; binds to two collections in ClassA &amp;quot;ListOfClassB&amp;quot; and &amp;quot;ListOfClassC&amp;quot;.  Since no ConverterParameter is defined the next level templates are found using the keys: &amp;quot;&lt;b&gt;IEnumerable[ClassB]&lt;/b&gt;&amp;quot; and &amp;quot;&lt;b&gt;IEnumerable[ClassC]&lt;/b&gt;&amp;quot; which are automatically generated by the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt;.  For more control of the templates used on the next level and to support more than one collection of the same element type,  the next HierarchicalDataTemplate for DataType=&amp;quot;{x:Type local:ClassC}&amp;quot; also use a ConverterParameter to specific the names of the DataTemplates to be used on the next level.  So support for the &amp;quot;Pickles&amp;quot; collection binding will look for a DataTemplate with &lt;b&gt;x:Key=&amp;quot;Pickles-Template&amp;quot;&lt;/b&gt;.  Support for the &amp;quot;IceCream&amp;quot; collection binding will look for a DataTemplate with &lt;b&gt;x:Key=&amp;quot;IceCream-Template&amp;quot;&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;For more information please look here: &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupConverter&amp;amp;referringTitle=Home"&gt;ComplexGroupConverter&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;The following example shows were the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupConverter&amp;amp;referringTitle=Home"&gt;ComplexGroupConverter&lt;/a&gt; can be used in your xaml:&lt;br /&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Class&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;ComplexDataTemplates.UnitTest.Window1&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:x&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:local&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;clr-namespace:ComplexDataTemplates.UnitTest&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:complex&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;clr-namespace:DaisleyHarrison.WPF.ComplexDataTemplates;assembly=ComplexDataTemplates&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;Title&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Window1&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Height&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;300&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Width&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;300&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;complex&lt;/span&gt;:&lt;span style="color:#A31515;"&gt;ComplexGroupDataTemplateSelector&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;complex-group-data-template-selector&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;complex&lt;/span&gt;:&lt;span style="color:#A31515;"&gt;ComplexGroupConverter&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;complex-group-converter&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;DataType&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{x:Type local:ClassA}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate.ItemsSource&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;MultiBinding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Converter&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{StaticResource complex-group-converter}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Binding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Path&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;ListOfClassB&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Binding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Path&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;ListOfClassC&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;MultiBinding&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate.ItemsSource&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Orientation&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Horizontal&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Image&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Source&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Images/classA.jpg&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;0,5,0,5&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Text&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=Label}&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ToolTip&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=ToolTip}&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;5,0,0,0&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;IEnumerable[ClassB]&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ItemsSource&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=.}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;List of Class Bs&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
         ...
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;DataType&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{x:Type local:ClassC}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate.ItemsSource&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;MultiBinding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Converter&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{StaticResource complex-group-converter}&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ConverterParameter&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Pickles-Template,IceCream-Template&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Binding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Path&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Pickles&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Binding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Path&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;IceCream&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;MultiBinding&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate.ItemsSource&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Orientation&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Horizontal&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Image&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Source&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Images/classC.jpg&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;0,5,0,5&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;5,0,0,0&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;Class C:&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Text&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=Label}&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ToolTip&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=ToolTip}&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;5,0,0,0&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        ...
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TreeView&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Name&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;testTreeView&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ItemTemplateSelector&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{StaticResource complex-group-data-template-selector}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TreeView&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;A complete working example is available in the downloadable source that can be found here: &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Release/ProjectReleases.aspx#ReleaseFiles" class="externalLink"&gt;Released Files&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>aarondh</author><pubDate>Mon, 01 Dec 2008 03:15:38 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20081201031538A</guid></item><item><title>Updated Wiki: Home</title><link>http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=Home&amp;version=26</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;The ComplexDataTemplates project cointains useful helper classes for enabling use of HierachicalDataTemplates to represent more complex data hierachies that contain multiple ItemsSources.  DataTemplate search criteria is expanded to support find by interface and&amp;#47;or base type.&lt;br /&gt; &lt;br /&gt;&lt;h2&gt;
Overview
&lt;/h2&gt;The ComplexDataTemplates control library was designed to enhance how the Windows Presentation Foundation uses DataTemplates and HierachicalDataTemplates to display hierachical data in a TreeView or other similar controls.  If you are tearing your hair out trying to get a TreeView to some more that the simplest of data hierarchies then this library is for you!&lt;br /&gt; &lt;br /&gt;The following is an example of a TreeView control using this control library and standard xaml to display a multi-level dataset with multiple grouping nodes at several levels:&lt;br /&gt; &lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=ComplexDataTemplates&amp;amp;DownloadId=50713" alt="ScreenShot.jpg" /&gt;&lt;br /&gt; &lt;br /&gt;The above data is based on the following sample type structure:&lt;br /&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;interface&lt;/span&gt; IItem
    {
        &lt;span style="color:#0000FF;"&gt;string&lt;/span&gt; Label { get; }
        &lt;span style="color:#0000FF;"&gt;string&lt;/span&gt; ToolTip { get; }
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;class&lt;/span&gt; Item : IItem
    {
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;string&lt;/span&gt; Label { get; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;string&lt;/span&gt; ToolTip { get; set; }
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;class&lt;/span&gt; ClassA : Item
    {
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; List&amp;lt;ClassB&amp;gt; ListOfClassB { get; &lt;span style="color:#0000FF;"&gt;private&lt;/span&gt; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; List&amp;lt;ClassC&amp;gt; ListOfClassC { get; &lt;span style="color:#0000FF;"&gt;private&lt;/span&gt; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; ClassA()
        {
            &lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;.ListOfClassB = &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; List&amp;lt;ClassB&amp;gt;();
            &lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;.ListOfClassC = &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; List&amp;lt;ClassC&amp;gt;();
        }
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;class&lt;/span&gt; ClassB : Item
    {
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;class&lt;/span&gt; ClassC : Item
    {
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; List&amp;lt;Item&amp;gt; Pickles { get; &lt;span style="color:#0000FF;"&gt;private&lt;/span&gt; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; List&amp;lt;Item&amp;gt; IceCream { get; &lt;span style="color:#0000FF;"&gt;private&lt;/span&gt; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; ClassC()
        {
            &lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;.Pickles = &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; List&amp;lt;Item&amp;gt;();
            &lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;.IceCream = &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; List&amp;lt;Item&amp;gt;();
        }
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;h1&gt;
ComplexGroupDataTemplateSelector
&lt;/h1&gt;The &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; enhances how DataTemplates are found in your application.  In addition to being able to specify data templates for IEnumerable collections, the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; will also find a template based on a interface implemented by the data item or a base type found in the data item hierachy.  Though data templates found in this manner are a little more expensive to perform than just a simple Type lookup,  the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; caches it's resolutions to help reduce the overall performance impact.  The template selector can be tuned for specify needs using a few properties.  For more information please look here: &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt;.&lt;br /&gt; &lt;br /&gt;One of the coolest features that the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; gives you is the ability to select a DataTemplate for an interface implemented by the data item or any base type of the data item.  In the example shown above, all of the leaf nodes of the tree are displayed using one DataTemplate markup with it's DataType property set to &lt;b&gt;DataType=&amp;quot;{x:Type local:IItem}&amp;quot;&lt;/b&gt;,  since IItem is the interface implemented by all of the data items in the example, any data item not explicitly templated will get the default template for the IItem interface.&lt;br /&gt; &lt;br /&gt;The following example shows were the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; can be used in your xaml:&lt;br /&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Class&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;ComplexDataTemplates.UnitTest.Window1&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:x&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:local&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;clr-namespace:ComplexDataTemplates.UnitTest&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:complex&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;clr-namespace:DaisleyHarrison.WPF.ComplexDataTemplates;assembly=ComplexDataTemplates&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;Title&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Window1&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Height&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;300&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Width&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;300&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;complex&lt;/span&gt;:&lt;span style="color:#A31515;"&gt;ComplexGroupDataTemplateSelector&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;complex-group-data-template-selector&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
        ...
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TreeView&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Name&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;testTreeView&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ItemTemplateSelector&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{StaticResource complex-group-data-template-selector}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TreeView&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;h1&gt;
ComplexGroupConverter
&lt;/h1&gt;In order to support the use of multiple ItemsSource bindings we use a combination of the built-in type MultiBinding and the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupConverter&amp;amp;referringTitle=Home"&gt;ComplexGroupConverter&lt;/a&gt; type found in this library.  Note also that for this to work correctly the ItemControl must also use the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt;.&lt;br /&gt; &lt;br /&gt;In the example below you will find two HierarchicalDataTemplates that make use of MultiBinding and the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupConverter&amp;amp;referringTitle=Home"&gt;ComplexGroupConverter&lt;/a&gt;.    The first HierachicalDataTemplate for DataType=&amp;quot;{x:Type local:ClassA}&amp;quot; binds to two collections in ClassA &amp;quot;ListOfClassB&amp;quot; and &amp;quot;ListOfClassC&amp;quot;.  Since no ConverterParameter is defined the next level templates are found using the keys: &amp;quot;&lt;b&gt;IEnumerable[ClassB]&lt;/b&gt;&amp;quot; and &amp;quot;&lt;b&gt;IEnumerable[ClassC]&lt;/b&gt;&amp;quot; which are automatically generated by the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt;.  For more control of the templates used on the next level and to support more than one collection of the same element type,  the next HierachicalDataTemplate for DataType=&amp;quot;{x:Type local:ClassC}&amp;quot; also use a ConverterParameter to specific the names of the DataTemplates to be used on the next level. So support for the &amp;quot;Pickles&amp;quot; collection binding will look for a DataTemplate with &lt;b&gt;x:Key=&amp;quot;Pickles-Template&amp;quot;&lt;/b&gt;.  Support for the &amp;quot;IceCream&amp;quot; collection binding will look for a DataTemplate with &lt;b&gt;x:Key=&amp;quot;IceCream-Template&amp;quot;&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;For more information please look here: &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupConverter&amp;amp;referringTitle=Home"&gt;ComplexGroupConverter&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;The following example shows were the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupConverter&amp;amp;referringTitle=Home"&gt;ComplexGroupConverter&lt;/a&gt; can be used in your xaml:&lt;br /&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Class&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;ComplexDataTemplates.UnitTest.Window1&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:x&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:local&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;clr-namespace:ComplexDataTemplates.UnitTest&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:complex&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;clr-namespace:DaisleyHarrison.WPF.ComplexDataTemplates;assembly=ComplexDataTemplates&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;Title&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Window1&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Height&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;300&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Width&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;300&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;complex&lt;/span&gt;:&lt;span style="color:#A31515;"&gt;ComplexGroupDataTemplateSelector&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;complex-group-data-template-selector&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;complex&lt;/span&gt;:&lt;span style="color:#A31515;"&gt;ComplexGroupConverter&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;complex-group-converter&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;DataType&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{x:Type local:ClassA}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate.ItemsSource&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;MultiBinding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Converter&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{StaticResource complex-group-converter}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Binding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Path&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;ListOfClassB&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Binding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Path&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;ListOfClassC&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;MultiBinding&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate.ItemsSource&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Orientation&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Horizontal&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Image&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Source&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Images/classA.jpg&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;0,5,0,5&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Text&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=Label}&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ToolTip&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=ToolTip}&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;5,0,0,0&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;IEnumerable[ClassB]&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ItemsSource&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=.}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;List of Class Bs&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
         ...
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;DataType&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{x:Type local:ClassC}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate.ItemsSource&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;MultiBinding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Converter&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{StaticResource complex-group-converter}&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ConverterParameter&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Pickles-Template,IceCream-Template&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Binding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Path&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Pickles&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Binding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Path&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;IceCream&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;MultiBinding&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate.ItemsSource&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Orientation&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Horizontal&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Image&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Source&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Images/classC.jpg&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;0,5,0,5&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;5,0,0,0&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;Class C:&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Text&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=Label}&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ToolTip&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=ToolTip}&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;5,0,0,0&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        ...
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TreeView&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Name&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;testTreeView&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ItemTemplateSelector&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{StaticResource complex-group-data-template-selector}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TreeView&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;A complete working example is available in the downloadable source that can be found here: &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Release/ProjectReleases.aspx#ReleaseFiles" class="externalLink"&gt;Released Files&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>aarondh</author><pubDate>Mon, 01 Dec 2008 03:11:47 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20081201031147A</guid></item><item><title>Updated Wiki: Home</title><link>http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=Home&amp;version=25</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;The ComplexDataTemplates project cointains useful helper classes for enabling use of HierachicalDataTemplates to represent more complex data hierachies that contain multiple ItemsSources.  DataTemplate search criteria is expanded to support find by interface and&amp;#47;or base type.&lt;br /&gt; &lt;br /&gt;&lt;h2&gt;
Overview
&lt;/h2&gt;The ComplexDataTemplates control library was designed to enhance how the Windows Presentation Foundation uses DataTemplates and HierachicalDataTemplates to display hierachical data in a TreeView or other similar controls.  If you are tearing your hair out trying to get a TreeView to some more that the simplest of data hierarchies then this library is for you!&lt;br /&gt; &lt;br /&gt;The following is an example of a TreeView control using this control library and standard xaml to display a multi-level dataset with multiple grouping nodes at several levels:&lt;br /&gt; &lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=ComplexDataTemplates&amp;amp;DownloadId=50713" alt="ScreenShot.jpg" /&gt;&lt;br /&gt; &lt;br /&gt;The above data is based on the following sample type structure:&lt;br /&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;interface&lt;/span&gt; IItem
    {
        &lt;span style="color:#0000FF;"&gt;string&lt;/span&gt; Label { get; }
        &lt;span style="color:#0000FF;"&gt;string&lt;/span&gt; ToolTip { get; }
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;class&lt;/span&gt; Item : IItem
    {
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;string&lt;/span&gt; Label { get; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;string&lt;/span&gt; ToolTip { get; set; }
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;class&lt;/span&gt; ClassA : Item
    {
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; List&amp;lt;ClassB&amp;gt; ListOfClassB { get; &lt;span style="color:#0000FF;"&gt;private&lt;/span&gt; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; List&amp;lt;ClassC&amp;gt; ListOfClassC { get; &lt;span style="color:#0000FF;"&gt;private&lt;/span&gt; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; ClassA()
        {
            &lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;.ListOfClassB = &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; List&amp;lt;ClassB&amp;gt;();
            &lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;.ListOfClassC = &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; List&amp;lt;ClassC&amp;gt;();
        }
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;class&lt;/span&gt; ClassB : Item
    {
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;class&lt;/span&gt; ClassC : Item
    {
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; List&amp;lt;Item&amp;gt; Pickles { get; &lt;span style="color:#0000FF;"&gt;private&lt;/span&gt; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; List&amp;lt;Item&amp;gt; IceCream { get; &lt;span style="color:#0000FF;"&gt;private&lt;/span&gt; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; ClassC()
        {
            &lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;.Pickles = &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; List&amp;lt;Item&amp;gt;();
            &lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;.IceCream = &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; List&amp;lt;Item&amp;gt;();
        }
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;h1&gt;
ComplexGroupDataTemplateSelector
&lt;/h1&gt;The &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; enhances how DataTemplates are found in your application.  In addition to being able to specify data templates for IEnumerable collections, the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; will also find a template based on a interface implemented by the data item or a base type found in the data item hierachy.  Though data templates found in this manner are a little more expensive to perform than just a simple Type lookup,  the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; caches it's resolutions to help reduce the overall performance impact.  The template selector can be tuned for specify needs using a few properties.  For more information please look here: &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt;.&lt;br /&gt; &lt;br /&gt;One of the coolest features that the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; gives you is the ability to select a DataTemplate on an Interface implemented by the data item or any base type of the data item.  In the example shown above, all of the leaf nodes of the tree are displayed using one DataTemplate markup with it's DataType property set to &lt;b&gt;DataType=&amp;quot;{x:Type local:IItem}&amp;quot;&lt;/b&gt;,  since IItem is the interface implemented by all of the data items in the example, any data item not explicitly templated will get the default template for the IItem interface.&lt;br /&gt; &lt;br /&gt;The following example shows were the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; can be used in your xaml:&lt;br /&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Class&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;ComplexDataTemplates.UnitTest.Window1&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:x&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:local&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;clr-namespace:ComplexDataTemplates.UnitTest&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:complex&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;clr-namespace:DaisleyHarrison.WPF.ComplexDataTemplates;assembly=ComplexDataTemplates&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;Title&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Window1&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Height&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;300&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Width&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;300&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;complex&lt;/span&gt;:&lt;span style="color:#A31515;"&gt;ComplexGroupDataTemplateSelector&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;complex-group-data-template-selector&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
        ...
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TreeView&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Name&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;testTreeView&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ItemTemplateSelector&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{StaticResource complex-group-data-template-selector}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TreeView&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;h1&gt;
ComplexGroupConverter
&lt;/h1&gt;In order to support the use of multiple ItemsSource bindings we use a combination of the built-in type MultiBinding and the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupConverter&amp;amp;referringTitle=Home"&gt;ComplexGroupConverter&lt;/a&gt; type found in this library.  Note also that for this to work correctly the ItemControl must also use the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt;.&lt;br /&gt; &lt;br /&gt;In the example below you will find two HierarchicalDataTemplates that make use of MultiBinding and the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupConverter&amp;amp;referringTitle=Home"&gt;ComplexGroupConverter&lt;/a&gt;.    The first HierachicalDataTemplate for DataType=&amp;quot;{x:Type local:ClassA}&amp;quot; binds to two collections in ClassA &amp;quot;ListOfClassB&amp;quot; and &amp;quot;ListOfClassC&amp;quot;.  Since no ConverterParameter is defined the next level templates are found using the keys: &amp;quot;&lt;b&gt;IEnumerable[ClassB]&lt;/b&gt;&amp;quot; and &amp;quot;&lt;b&gt;IEnumerable[ClassC]&lt;/b&gt;&amp;quot; which are automatically generated by the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt;.  For more control of the templates used on the next level and to support more than one collection of the same element type,  the next HierachicalDataTemplate for DataType=&amp;quot;{x:Type local:ClassC}&amp;quot; also use a ConverterParameter to specific the names of the DataTemplates to be used on the next level. So support for the &amp;quot;Pickles&amp;quot; collection binding will look for a DataTemplate with &lt;b&gt;x:Key=&amp;quot;Pickles-Template&amp;quot;&lt;/b&gt;.  Support for the &amp;quot;IceCream&amp;quot; collection binding will look for a DataTemplate with &lt;b&gt;x:Key=&amp;quot;IceCream-Template&amp;quot;&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;For more information please look here: &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupConverter&amp;amp;referringTitle=Home"&gt;ComplexGroupConverter&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;The following example shows were the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupConverter&amp;amp;referringTitle=Home"&gt;ComplexGroupConverter&lt;/a&gt; can be used in your xaml:&lt;br /&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Class&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;ComplexDataTemplates.UnitTest.Window1&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:x&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:local&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;clr-namespace:ComplexDataTemplates.UnitTest&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:complex&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;clr-namespace:DaisleyHarrison.WPF.ComplexDataTemplates;assembly=ComplexDataTemplates&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;Title&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Window1&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Height&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;300&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Width&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;300&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;complex&lt;/span&gt;:&lt;span style="color:#A31515;"&gt;ComplexGroupDataTemplateSelector&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;complex-group-data-template-selector&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;complex&lt;/span&gt;:&lt;span style="color:#A31515;"&gt;ComplexGroupConverter&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;complex-group-converter&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;DataType&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{x:Type local:ClassA}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate.ItemsSource&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;MultiBinding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Converter&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{StaticResource complex-group-converter}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Binding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Path&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;ListOfClassB&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Binding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Path&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;ListOfClassC&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;MultiBinding&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate.ItemsSource&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Orientation&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Horizontal&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Image&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Source&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Images/classA.jpg&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;0,5,0,5&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Text&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=Label}&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ToolTip&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=ToolTip}&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;5,0,0,0&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;IEnumerable[ClassB]&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ItemsSource&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=.}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;List of Class Bs&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
         ...
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;DataType&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{x:Type local:ClassC}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate.ItemsSource&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;MultiBinding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Converter&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{StaticResource complex-group-converter}&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ConverterParameter&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Pickles-Template,IceCream-Template&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Binding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Path&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Pickles&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Binding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Path&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;IceCream&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;MultiBinding&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate.ItemsSource&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Orientation&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Horizontal&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Image&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Source&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Images/classC.jpg&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;0,5,0,5&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;5,0,0,0&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;Class C:&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Text&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=Label}&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ToolTip&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=ToolTip}&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;5,0,0,0&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        ...
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TreeView&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Name&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;testTreeView&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ItemTemplateSelector&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{StaticResource complex-group-data-template-selector}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TreeView&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;A complete working example is available in the downloadable source that can be found here: &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Release/ProjectReleases.aspx#ReleaseFiles" class="externalLink"&gt;Released Files&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>aarondh</author><pubDate>Mon, 01 Dec 2008 03:10:06 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20081201031006A</guid></item><item><title>Updated Wiki: Home</title><link>http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=Home&amp;version=24</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;The ComplexDataTemplates project cointains useful helper classes for enabling use of HierachicalDataTemplates to represent more complex data hierachies that contain multiple ItemsSources.  DataTemplate search criteria is expanded to support find by interface and&amp;#47;or base type.&lt;br /&gt; &lt;br /&gt;&lt;h2&gt;
Overview
&lt;/h2&gt;The ComplexDataTemplates control library was designed to enhance how the Windows Presentation Foundation uses DataTemplates and HierachicalDataTemplates to display hierachical data in a TreeView or other similar controls.  If you are tearing your hair out trying to get a TreeView to some more that the simplest of data hierarchies then this library is for you!&lt;br /&gt; &lt;br /&gt;The following is an example of a TreeView control using this control library and standard xaml to display a multi-level dataset with multiple grouping nodes at several levels:&lt;br /&gt; &lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=ComplexDataTemplates&amp;amp;DownloadId=50713" alt="ScreenShot.jpg" /&gt;&lt;br /&gt; &lt;br /&gt;The above data is based on the following sample type structure:&lt;br /&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;interface&lt;/span&gt; IItem
    {
        &lt;span style="color:#0000FF;"&gt;string&lt;/span&gt; Label { get; }
        &lt;span style="color:#0000FF;"&gt;string&lt;/span&gt; ToolTip { get; }
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;class&lt;/span&gt; Item : IItem
    {
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;string&lt;/span&gt; Label { get; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;string&lt;/span&gt; ToolTip { get; set; }
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;class&lt;/span&gt; ClassA : Item
    {
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; List&amp;lt;ClassB&amp;gt; ListOfClassB { get; &lt;span style="color:#0000FF;"&gt;private&lt;/span&gt; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; List&amp;lt;ClassC&amp;gt; ListOfClassC { get; &lt;span style="color:#0000FF;"&gt;private&lt;/span&gt; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; ClassA()
        {
            &lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;.ListOfClassB = &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; List&amp;lt;ClassB&amp;gt;();
            &lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;.ListOfClassC = &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; List&amp;lt;ClassC&amp;gt;();
        }
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;class&lt;/span&gt; ClassB : Item
    {
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;class&lt;/span&gt; ClassC : Item
    {
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; List&amp;lt;Item&amp;gt; Pickles { get; &lt;span style="color:#0000FF;"&gt;private&lt;/span&gt; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; List&amp;lt;Item&amp;gt; IceCream { get; &lt;span style="color:#0000FF;"&gt;private&lt;/span&gt; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; ClassC()
        {
            &lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;.Pickles = &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; List&amp;lt;Item&amp;gt;();
            &lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;.IceCream = &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; List&amp;lt;Item&amp;gt;();
        }
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;h1&gt;
ComplexGroupDataTemplateSelector
&lt;/h1&gt;The &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; enhances how DataTemplates are found in your application.  In addition to being able to specify data templates for IEnumerable collections, the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; will also find a template based on a interface implemented by the data item or a base type found in the data item hierachy.  Though data templates found in this manner are a little more expensive to perform than just a simple Type lookup,  the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; caches it's resolutions to help reduce the overall performance impact.  The template selector can be tuned for specify needs using a few properties.  For more information please look here: &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt;.&lt;br /&gt; &lt;br /&gt;The following example shows were the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; can be used in your xaml:&lt;br /&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Class&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;ComplexDataTemplates.UnitTest.Window1&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:x&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:local&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;clr-namespace:ComplexDataTemplates.UnitTest&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:complex&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;clr-namespace:DaisleyHarrison.WPF.ComplexDataTemplates;assembly=ComplexDataTemplates&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;Title&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Window1&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Height&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;300&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Width&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;300&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;complex&lt;/span&gt;:&lt;span style="color:#A31515;"&gt;ComplexGroupDataTemplateSelector&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;complex-group-data-template-selector&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
        ...
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TreeView&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Name&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;testTreeView&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ItemTemplateSelector&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{StaticResource complex-group-data-template-selector}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TreeView&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;h1&gt;
ComplexGroupConverter
&lt;/h1&gt;In order to support the use of multiple ItemsSource bindings we use a combination of the built-in type MultiBinding and the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupConverter&amp;amp;referringTitle=Home"&gt;ComplexGroupConverter&lt;/a&gt; type found in this library.  Note also that for this to work correctly the ItemControl must also use the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt;.&lt;br /&gt; &lt;br /&gt;In the example below you will find two HierarchicalDataTemplates that make use of MultiBinding and the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupConverter&amp;amp;referringTitle=Home"&gt;ComplexGroupConverter&lt;/a&gt;.    The first HierachicalDataTemplate for DataType=&amp;quot;{x:Type local:ClassA}&amp;quot; binds to two collections in ClassA &amp;quot;ListOfClassB&amp;quot; and &amp;quot;ListOfClassC&amp;quot;.  Since no ConverterParameter is defined the next level templates are found using the keys: &amp;quot;&lt;b&gt;IEnumerable[ClassB]&lt;/b&gt;&amp;quot; and &amp;quot;&lt;b&gt;IEnumerable[ClassC]&lt;/b&gt;&amp;quot; which are automatically generated by the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt;.  For more control of the templates used on the next level and to support more than one collection of the same element type,  the next HierachicalDataTemplate for DataType=&amp;quot;{x:Type local:ClassC}&amp;quot; also use a ConverterParameter to specific the names of the DataTemplates to be used on the next level. So support for the &amp;quot;Pickles&amp;quot; collection binding will look for a DataTemplate with &lt;b&gt;x:Key=&amp;quot;Pickles-Template&amp;quot;&lt;/b&gt;.  Support for the &amp;quot;IceCream&amp;quot; collection binding will look for a DataTemplate with &lt;b&gt;x:Key=&amp;quot;IceCream-Template&amp;quot;&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;For more information please look here: &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupConverter&amp;amp;referringTitle=Home"&gt;ComplexGroupConverter&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;The following example shows were the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupConverter&amp;amp;referringTitle=Home"&gt;ComplexGroupConverter&lt;/a&gt; can be used in your xaml:&lt;br /&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Class&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;ComplexDataTemplates.UnitTest.Window1&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:x&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:local&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;clr-namespace:ComplexDataTemplates.UnitTest&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:complex&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;clr-namespace:DaisleyHarrison.WPF.ComplexDataTemplates;assembly=ComplexDataTemplates&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;Title&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Window1&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Height&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;300&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Width&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;300&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;complex&lt;/span&gt;:&lt;span style="color:#A31515;"&gt;ComplexGroupDataTemplateSelector&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;complex-group-data-template-selector&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;complex&lt;/span&gt;:&lt;span style="color:#A31515;"&gt;ComplexGroupConverter&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;complex-group-converter&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;DataType&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{x:Type local:ClassA}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate.ItemsSource&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;MultiBinding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Converter&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{StaticResource complex-group-converter}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Binding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Path&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;ListOfClassB&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Binding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Path&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;ListOfClassC&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;MultiBinding&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate.ItemsSource&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Orientation&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Horizontal&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Image&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Source&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Images/classA.jpg&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;0,5,0,5&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Text&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=Label}&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ToolTip&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=ToolTip}&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;5,0,0,0&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;IEnumerable[ClassB]&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ItemsSource&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=.}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;List of Class Bs&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
         ...
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;DataType&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{x:Type local:ClassC}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate.ItemsSource&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;MultiBinding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Converter&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{StaticResource complex-group-converter}&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ConverterParameter&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Pickles-Template,IceCream-Template&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Binding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Path&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Pickles&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Binding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Path&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;IceCream&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;MultiBinding&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate.ItemsSource&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Orientation&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Horizontal&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Image&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Source&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Images/classC.jpg&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;0,5,0,5&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;5,0,0,0&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;Class C:&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Text&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=Label}&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ToolTip&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=ToolTip}&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;5,0,0,0&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        ...
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TreeView&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Name&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;testTreeView&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ItemTemplateSelector&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{StaticResource complex-group-data-template-selector}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TreeView&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;A complete working example is available in the downloadable source that can be found here: &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Release/ProjectReleases.aspx#ReleaseFiles" class="externalLink"&gt;Released Files&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>aarondh</author><pubDate>Mon, 01 Dec 2008 03:03:04 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20081201030304A</guid></item><item><title>Updated Wiki: Home</title><link>http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=Home&amp;version=23</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;The ComplexDataTemplates project cointains useful helper classes for enabling use of HierachicalDataTemplates to represent more complex data hierachies that contain multiple ItemsSources.  DataTemplate search criteria is expanded to support find by interface and&amp;#47;or base type.&lt;br /&gt; &lt;br /&gt;&lt;h2&gt;
Overview
&lt;/h2&gt; &lt;br /&gt;The ComplexDataTemplates control library was designed to enhance how the Windows Presentation Foundation uses DataTemplates and HierachicalDataTemplates to display hierachical data in a TreeView or other similar controls.  If you are tearing your hair out trying to get a TreeView to some more that the simplest of data hierarchies then this library is for you!&lt;br /&gt; &lt;br /&gt;The following is an example of a TreeView control using this control library and standard xaml to display a multi-level dataset with multiple grouping nodes at several levels:&lt;br /&gt; &lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=ComplexDataTemplates&amp;amp;DownloadId=50713" alt="ScreenShot.jpg" /&gt;&lt;br /&gt; &lt;br /&gt;The above data is based on the following sample type structure:&lt;br /&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;interface&lt;/span&gt; IItem
    {
        &lt;span style="color:#0000FF;"&gt;string&lt;/span&gt; Label { get; }
        &lt;span style="color:#0000FF;"&gt;string&lt;/span&gt; ToolTip { get; }
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;class&lt;/span&gt; Item : IItem
    {
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;string&lt;/span&gt; Label { get; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;string&lt;/span&gt; ToolTip { get; set; }
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;class&lt;/span&gt; ClassA : Item
    {
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; List&amp;lt;ClassB&amp;gt; ListOfClassB { get; &lt;span style="color:#0000FF;"&gt;private&lt;/span&gt; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; List&amp;lt;ClassC&amp;gt; ListOfClassC { get; &lt;span style="color:#0000FF;"&gt;private&lt;/span&gt; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; ClassA()
        {
            &lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;.ListOfClassB = &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; List&amp;lt;ClassB&amp;gt;();
            &lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;.ListOfClassC = &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; List&amp;lt;ClassC&amp;gt;();
        }
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;class&lt;/span&gt; ClassB : Item
    {
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;class&lt;/span&gt; ClassC : Item
    {
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; List&amp;lt;Item&amp;gt; Pickles { get; &lt;span style="color:#0000FF;"&gt;private&lt;/span&gt; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; List&amp;lt;Item&amp;gt; IceCream { get; &lt;span style="color:#0000FF;"&gt;private&lt;/span&gt; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; ClassC()
        {
            &lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;.Pickles = &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; List&amp;lt;Item&amp;gt;();
            &lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;.IceCream = &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; List&amp;lt;Item&amp;gt;();
        }
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;h1&gt;
ComplexGroupDataTemplateSelector
&lt;/h1&gt;The &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; enhances how DataTemplates are found in your application.  In addition to being able to specify data templates for IEnumerable collections, the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; will also find a template based on a interface implemented by the data item or a base type found in the data item hierachy.  Though data templates found in this manner are a little more expensive to perform than just a simple Type lookup,  the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; caches it's resolutions to help reduce the overall performance impact.  The template selector can be tuned for specify needs using a few properties.  For more information please look here: &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt;.&lt;br /&gt; &lt;br /&gt;The following example shows were the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; can be used in your xaml:&lt;br /&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Class&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;ComplexDataTemplates.UnitTest.Window1&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:x&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:local&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;clr-namespace:ComplexDataTemplates.UnitTest&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:complex&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;clr-namespace:DaisleyHarrison.WPF.ComplexDataTemplates;assembly=ComplexDataTemplates&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;Title&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Window1&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Height&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;300&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Width&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;300&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;complex&lt;/span&gt;:&lt;span style="color:#A31515;"&gt;ComplexGroupDataTemplateSelector&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;complex-group-data-template-selector&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
        ...
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TreeView&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Name&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;testTreeView&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ItemTemplateSelector&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{StaticResource complex-group-data-template-selector}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TreeView&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;h1&gt;
ComplexGroupConverter
&lt;/h1&gt;In order to support the use of multiple ItemsSource bindings we use a combination of the built-in type MultiBinding and the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupConverter&amp;amp;referringTitle=Home"&gt;ComplexGroupConverter&lt;/a&gt; type found in this library.  Note also that for this to work correctly the ItemControl must also use the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt;.&lt;br /&gt; &lt;br /&gt;In the example below you will find two HierarchicalDataTemplates that make use of MultiBinding and the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupConverter&amp;amp;referringTitle=Home"&gt;ComplexGroupConverter&lt;/a&gt;.    The first HierachicalDataTemplate for DataType=&amp;quot;{x:Type local:ClassA}&amp;quot; binds to two collections in ClassA &amp;quot;ListOfClassB&amp;quot; and &amp;quot;ListOfClassC&amp;quot;.  Since no ConverterParameter is defined the next level templates are found using the keys: &amp;quot;&lt;b&gt;IEnumerable[ClassB]&lt;/b&gt;&amp;quot; and &amp;quot;&lt;b&gt;IEnumerable[ClassC]&lt;/b&gt;&amp;quot; which are automatically generated by the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt;.  For more control of the templates used on the next level and to support more than one collection of the same element type,  the next HierachicalDataTemplate for DataType=&amp;quot;{x:Type local:ClassC}&amp;quot; also use a ConverterParameter to specific the names of the DataTemplates to be used on the next level. So support for the &amp;quot;Pickles&amp;quot; collection binding will look for a DataTemplate with &lt;b&gt;x:Key=&amp;quot;Pickles-Template&amp;quot;&lt;/b&gt;.  Support for the &amp;quot;IceCream&amp;quot; collection binding will look for a DataTemplate with &lt;b&gt;x:Key=&amp;quot;IceCream-Template&amp;quot;&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;For more information please look here: &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupConverter&amp;amp;referringTitle=Home"&gt;ComplexGroupConverter&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;The following example shows were the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupConverter&amp;amp;referringTitle=Home"&gt;ComplexGroupConverter&lt;/a&gt; can be used in your xaml:&lt;br /&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Class&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;ComplexDataTemplates.UnitTest.Window1&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:x&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:local&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;clr-namespace:ComplexDataTemplates.UnitTest&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:complex&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;clr-namespace:DaisleyHarrison.WPF.ComplexDataTemplates;assembly=ComplexDataTemplates&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;Title&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Window1&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Height&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;300&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Width&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;300&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;complex&lt;/span&gt;:&lt;span style="color:#A31515;"&gt;ComplexGroupDataTemplateSelector&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;complex-group-data-template-selector&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;complex&lt;/span&gt;:&lt;span style="color:#A31515;"&gt;ComplexGroupConverter&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;complex-group-converter&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;DataType&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{x:Type local:ClassA}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate.ItemsSource&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;MultiBinding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Converter&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{StaticResource complex-group-converter}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Binding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Path&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;ListOfClassB&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Binding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Path&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;ListOfClassC&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;MultiBinding&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate.ItemsSource&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Orientation&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Horizontal&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Image&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Source&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Images/classA.jpg&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;0,5,0,5&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Text&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=Label}&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ToolTip&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=ToolTip}&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;5,0,0,0&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;IEnumerable[ClassB]&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ItemsSource&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=.}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;List of Class Bs&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
         ...
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;DataType&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{x:Type local:ClassC}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate.ItemsSource&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;MultiBinding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Converter&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{StaticResource complex-group-converter}&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ConverterParameter&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Pickles-Template,IceCream-Template&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Binding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Path&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Pickles&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Binding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Path&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;IceCream&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;MultiBinding&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate.ItemsSource&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Orientation&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Horizontal&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Image&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Source&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Images/classC.jpg&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;0,5,0,5&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;5,0,0,0&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;Class C:&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Text&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=Label}&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ToolTip&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=ToolTip}&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;5,0,0,0&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        ...
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TreeView&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Name&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;testTreeView&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ItemTemplateSelector&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{StaticResource complex-group-data-template-selector}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TreeView&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;A complete working example is available in the downloadable source that can be found here: &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Release/ProjectReleases.aspx#ReleaseFiles" class="externalLink"&gt;Released Files&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>aarondh</author><pubDate>Mon, 01 Dec 2008 03:02:44 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20081201030244A</guid></item><item><title>Updated Wiki: Home</title><link>http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=Home&amp;version=22</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;The ComplexDataTemplates project cointains useful helper classes for enabling use of HierachicalDataTemplates to represent more complex data hierachies that contain multiple ItemsSources.  DataTemplate search criteria is expanded to support find by interface and&amp;#47;or base type.&lt;br /&gt; &lt;br /&gt;&lt;h2&gt;
Overview
&lt;/h2&gt; &lt;br /&gt;The ComplexDataTemplates control library was designed to enhance how the Windows Presentation Foundation uses DataTemplates and HierachicalDataTemplates to display hierachical data in a TreeView or other similar controls.&lt;br /&gt; &lt;br /&gt;The following is an example of a TreeView control using this control library and standard xaml to display a multi-level dataset with multiple grouping nodes at several levels:&lt;br /&gt; &lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=ComplexDataTemplates&amp;amp;DownloadId=50713" alt="ScreenShot.jpg" /&gt;&lt;br /&gt; &lt;br /&gt;The above data is based on the following sample type structure:&lt;br /&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;interface&lt;/span&gt; IItem
    {
        &lt;span style="color:#0000FF;"&gt;string&lt;/span&gt; Label { get; }
        &lt;span style="color:#0000FF;"&gt;string&lt;/span&gt; ToolTip { get; }
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;class&lt;/span&gt; Item : IItem
    {
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;string&lt;/span&gt; Label { get; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;string&lt;/span&gt; ToolTip { get; set; }
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;class&lt;/span&gt; ClassA : Item
    {
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; List&amp;lt;ClassB&amp;gt; ListOfClassB { get; &lt;span style="color:#0000FF;"&gt;private&lt;/span&gt; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; List&amp;lt;ClassC&amp;gt; ListOfClassC { get; &lt;span style="color:#0000FF;"&gt;private&lt;/span&gt; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; ClassA()
        {
            &lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;.ListOfClassB = &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; List&amp;lt;ClassB&amp;gt;();
            &lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;.ListOfClassC = &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; List&amp;lt;ClassC&amp;gt;();
        }
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;class&lt;/span&gt; ClassB : Item
    {
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
    &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;class&lt;/span&gt; ClassC : Item
    {
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; List&amp;lt;Item&amp;gt; Pickles { get; &lt;span style="color:#0000FF;"&gt;private&lt;/span&gt; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; List&amp;lt;Item&amp;gt; IceCream { get; &lt;span style="color:#0000FF;"&gt;private&lt;/span&gt; set; }
        &lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; ClassC()
        {
            &lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;.Pickles = &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; List&amp;lt;Item&amp;gt;();
            &lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;.IceCream = &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; List&amp;lt;Item&amp;gt;();
        }
    }
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;h1&gt;
ComplexGroupDataTemplateSelector
&lt;/h1&gt;The &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; enhances how DataTemplates are found in your application.  In addition to being able to specify data templates for IEnumerable collections, the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; will also find a template based on a interface implemented by the data item or a base type found in the data item hierachy.  Though data templates found in this manner are a little more expensive to perform than just a simple Type lookup,  the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; caches it's resolutions to help reduce the overall performance impact.  The template selector can be tuned for specify needs using a few properties.  For more information please look here: &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt;.&lt;br /&gt; &lt;br /&gt;The following example shows were the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt; can be used in your xaml:&lt;br /&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Class&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;ComplexDataTemplates.UnitTest.Window1&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:x&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:local&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;clr-namespace:ComplexDataTemplates.UnitTest&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:complex&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;clr-namespace:DaisleyHarrison.WPF.ComplexDataTemplates;assembly=ComplexDataTemplates&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;Title&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Window1&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Height&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;300&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Width&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;300&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;complex&lt;/span&gt;:&lt;span style="color:#A31515;"&gt;ComplexGroupDataTemplateSelector&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;complex-group-data-template-selector&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
        ...
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TreeView&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Name&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;testTreeView&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ItemTemplateSelector&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{StaticResource complex-group-data-template-selector}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TreeView&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;h1&gt;
ComplexGroupConverter
&lt;/h1&gt;In order to support the use of multiple ItemsSource bindings we use a combination of the built-in type MultiBinding and the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupConverter&amp;amp;referringTitle=Home"&gt;ComplexGroupConverter&lt;/a&gt; type found in this library.  Note also that for this to work correctly the ItemControl must also use the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt;.&lt;br /&gt; &lt;br /&gt;In the example below you will find two HierarchicalDataTemplates that make use of MultiBinding and the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupConverter&amp;amp;referringTitle=Home"&gt;ComplexGroupConverter&lt;/a&gt;.    The first HierachicalDataTemplate for DataType=&amp;quot;{x:Type local:ClassA}&amp;quot; binds to two collections in ClassA &amp;quot;ListOfClassB&amp;quot; and &amp;quot;ListOfClassC&amp;quot;.  Since no ConverterParameter is defined the next level templates are found using the keys: &amp;quot;&lt;b&gt;IEnumerable[ClassB]&lt;/b&gt;&amp;quot; and &amp;quot;&lt;b&gt;IEnumerable[ClassC]&lt;/b&gt;&amp;quot; which are automatically generated by the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupDataTemplateSelector&amp;amp;referringTitle=Home"&gt;ComplexGroupDataTemplateSelector&lt;/a&gt;.  For more control of the templates used on the next level and to support more than one collection of the same element type,  the next HierachicalDataTemplate for DataType=&amp;quot;{x:Type local:ClassC}&amp;quot; also use a ConverterParameter to specific the names of the DataTemplates to be used on the next level. So support for the &amp;quot;Pickles&amp;quot; collection binding will look for a DataTemplate with &lt;b&gt;x:Key=&amp;quot;Pickles-Template&amp;quot;&lt;/b&gt;.  Support for the &amp;quot;IceCream&amp;quot; collection binding will look for a DataTemplate with &lt;b&gt;x:Key=&amp;quot;IceCream-Template&amp;quot;&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;For more information please look here: &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupConverter&amp;amp;referringTitle=Home"&gt;ComplexGroupConverter&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;The following example shows were the &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Wiki/View.aspx?title=ComplexGroupConverter&amp;amp;referringTitle=Home"&gt;ComplexGroupConverter&lt;/a&gt; can be used in your xaml:&lt;br /&gt; &lt;br /&gt;&lt;div style="color:#000000;background-color:#FFFFFF;"&gt;&lt;pre&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Class&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;ComplexDataTemplates.UnitTest.Window1&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:x&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:local&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;clr-namespace:ComplexDataTemplates.UnitTest&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;xmlns:complex&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;clr-namespace:DaisleyHarrison.WPF.ComplexDataTemplates;assembly=ComplexDataTemplates&amp;quot;&lt;/span&gt;
    &lt;span style="color:#FF0000;"&gt;Title&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Window1&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Height&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;300&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Width&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;300&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;complex&lt;/span&gt;:&lt;span style="color:#A31515;"&gt;ComplexGroupDataTemplateSelector&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;complex-group-data-template-selector&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;complex&lt;/span&gt;:&lt;span style="color:#A31515;"&gt;ComplexGroupConverter&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;complex-group-converter&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;DataType&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{x:Type local:ClassA}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate.ItemsSource&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;MultiBinding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Converter&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{StaticResource complex-group-converter}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Binding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Path&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;ListOfClassB&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Binding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Path&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;ListOfClassC&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;MultiBinding&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate.ItemsSource&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Orientation&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Horizontal&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Image&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Source&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Images/classA.jpg&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;0,5,0,5&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Text&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=Label}&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ToolTip&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=ToolTip}&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;5,0,0,0&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Key&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;IEnumerable[ClassB]&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ItemsSource&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=.}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;List of Class Bs&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
         ...
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;DataType&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{x:Type local:ClassC}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate.ItemsSource&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;MultiBinding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Converter&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{StaticResource complex-group-converter}&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ConverterParameter&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Pickles-Template,IceCream-Template&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Binding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Path&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Pickles&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Binding&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Path&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;IceCream&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;MultiBinding&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate.ItemsSource&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Orientation&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Horizontal&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Image&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Source&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Images/classC.jpg&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;0,5,0,5&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;5,0,0,0&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;Class C:&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBlock&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;Text&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=Label}&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ToolTip&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{Binding Path=ToolTip}&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;VerticalAlignment&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;  &lt;span style="color:#FF0000;"&gt;Margin&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;5,0,0,0&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HierarchicalDataTemplate&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        ...
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window.Resources&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TreeView&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;x:Name&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;testTreeView&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;ItemTemplateSelector&lt;/span&gt;=&lt;span style="color:#0000FF;"&gt;&amp;quot;{StaticResource complex-group-data-template-selector}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
            
        &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TreeView&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Window&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;A complete working example is available in the downloadable source that can be found here: &lt;a href="http://www.codeplex.com/ComplexDataTemplates/Release/ProjectReleases.aspx#ReleaseFiles" class="externalLink"&gt;Released Files&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>aarondh</author><pubDate>Mon, 01 Dec 2008 03:01:11 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20081201030111A</guid></item></channel></rss>