WPF:将具有不同类型项目的多个级别添加到 TreeView

WPF: Add multiple level with different types items to TreeView

我有一个 class (ClassA),其中包含两种不同类型的列表,List of ClassBTypesList of ClassCClassBTypes 有自己的 List of ClassB.

我想为 TreeView 实现以下结构

-- ClassAName   
-- -- ClassBType1Name  
-- -- -- ClassB1Name  
-- -- -- ClassB2Name     
-- -- ClassBType2Name  
-- -- -- ClassB1Name  
-- -- -- ClassB2Name  
-- -- ClassC1Name  
-- -- ClassC2Name

我设法让树绘制 ClassAClassB,但无法弄清楚如何将 ClassC 添加到 Tree resources
请检查以下源代码。

Test.xaml.cs

public partial class Test : Window {    
    InitializeComponent();
    var a = new List<ClassA>{new ClassA(), new ClassA()};
    treeView.ItemsSource = a;
}

C# classes:

public class ClassA{    
    // initiate obj    
    public string Name {get; set;}     
    public List<ClassBTypes> Btypes {get; set;}     
    public List<ClassC> C {get; set;}    
}    
public class ClassBTypes{    
    public string Name {get; set;}    
    public List<ClassB> B {get; set;}   
}    
public class ClassB{    
    public string Name {get; set;}    
}     
public class ClassC{   
    public string Name {get; set;}   
}  

xaml代码:

<Window.Resources>
    <DataTemplate x:Key="aKey">
        <TextBlock Text="{Binding Name}"></TextBlock>
    </DataTemplate>
    <HierarchicalDataTemplate x:Key="bKey"
               ItemsSource="{Binding B}"
               ItemTemplate="{StaticResource aKey}">
        <TextBlock Text="{Binding Name}" />
    </HierarchicalDataTemplate>
    <HierarchicalDataTemplate x:Key="bTypeKey"
               ItemsSource="{Binding Btypes}"
               ItemTemplate="{StaticResource bKey}">
        <TextBlock Text="{Binding Name}" />
    </HierarchicalDataTemplate>
</Window.Resources>   
.....     
<Grid>
   <TreeView Name="treeView" ItemTemplate="{StaticResource bTypeKey}" />
</Grid>

如何从 ClassA obj 添加 ClassC list,我已将以下代码添加到 <Window.Resources>,但如何将其添加到 treeView 资源。

<HierarchicalDataTemplate x:Key="bTypeKey"
         ItemsSource="{Binding Btypes}"
         ItemTemplate="{StaticResource bKey}">
    <TextBlock Text="{Binding Name}" />
</HierarchicalDataTemplate>

我通过将两种类型的列表合并到 CompositeCollection 来解决这个问题。
查看此 answer 了解更多详情。