I am trying to get a treeview to bind my collection so that all groups show nested groups and each group will show entry.
How can I use the HierarchicalDataTemplate so that treeview will process both SubGroups and Entries collection?
Groups show subgroups and entries
Example:
Group1
--Entry
--Entry
Group2
--Group4
----Group1
------Entry
------Entry
----Entry
----Entry
--Entry
--Entry
Group3
--Entry
--Entry
objects
namespace TaskManager.Domain
{
    public class Entry
    {
        public int Key { get; set; }
        public string Name { get; set; }
    }
}
namespace TaskManager.Domain
{
    public class Group
    {
        public int Key { get; set; }
        public string Name { get; set; }
        public IList<Group> SubGroups { get; set; }
        public IList<Entry> Entries { get; set; }
    }
}
Test data
namespace DrillDownView { public class TestData {
    public IList<Group> Groups = new List<Group>();
    public void Load()
    {
        Group grp1 = new Group() { Key = 1, Name = "Group 1", SubGroups = new List<Group>(), Entries = new List<Entry>() };
        Group grp2 = new Group() { Key = 2, Name = "Group 2", SubGroups = new List<Group>(), Entries = new List<Entry>() };
        Group grp3 = new Group() { Key = 3, Name = "Group 3", SubGroups = new List<Group>(), Entries = new List<Entry>() };
        Group grp4 = new Group() { Key = 4, Name = "Group 4", SubGroups = new List<Group>(), Entries = new List<Entry>() };
        //grp1
        grp1.Entries.Add(new Entry() { Key=1, Name="Entry number 1" });
        grp1.Entries.Add(new Entry() { Key=2, Name="Entry number 2" });
        grp1.Entries.Add(new Entry() { Key=3,Name="Entry number 3" });
        //grp2
        grp2.Entries.Add(new Entry(){ Key=4, Name = "Entry number 4"});
        grp2.Entries.Add(new Entry(){ Key=5, Name = "Entry number 5"});
        grp2.Entries.Add(new Entry(){ Key=6, Name = "Entry number 6"});
        //grp3
        grp3.Entries.Add(new Entry(){ Key=7, Name = "Entry number 7"});
        grp3.Entries.Add(new Entry(){ Key=8, Name = "Entry number 8"});
        grp3.Entries.Add(new Entry(){ Key=9, Name = "Entry number 9"});
        //grp4
        grp4.Entries.Add(new Entry(){ Key=10, Name = "Entry number 10"});
        grp4.Entries.Add(new Entry(){ Key=11, Name = "Entry number 11"});
        grp4.Entries.Add(new Entry(){ Key=12, Name = "Entry number 12"});
        grp4.SubGroups.Add(grp1);
        grp2.SubGroups.Add(grp4);
        Groups.Add(grp1);
        Groups.Add(grp2);
        Groups.Add(grp3);
    }
}
}
XAML
    <TreeView Name="GroupView" Grid.Row="0" Grid.Column="0" ItemsSource="{Binding}">
        <TreeView.Resources>
            <HierarchicalDataTemplate DataType="{x:Type local:Group}" ItemsSource="{Binding SubGroups}">
                <TextBlock Text="{Binding Path=Name}" />
            </HierarchicalDataTemplate>
            <HierarchicalDataTemplate DataType="{x:Type local:Entry}" ItemsSource="{Binding Entries}">
                <TextBlock Text="{Binding Path=Name}" />
            </HierarchicalDataTemplate>
        </TreeView.Resources>
    </TreeView>
</Grid>
XAML.CS
public partial class Window2 : Window
{
    public Window2()
    {
        InitializeComponent();
        LoadView();
    }
    private void LoadView()
    {
        TestData data = new TestData();
        data.Load();
        GroupView.ItemsSource = data.Groups;
    }
}
