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

时间:2016-06-14 15:27:53

标签: c# wpf xaml treeview hierarchicaldatatemplate

我的课程(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#类:

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>

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

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

1 个答案:

答案 0 :(得分:0)

我通过将两种类型的列表合并到CompositeCollection来修复此问题 有关详细信息,请查看此answer