WPF:将具有不同类型项目的多个级别添加到 TreeView
WPF: Add multiple level with different types items to TreeView
我有一个 class (ClassA)
,其中包含两种不同类型的列表,List of ClassBTypes
和 List of ClassC
。 ClassBTypes
有自己的 List of ClassB
.
我想为 TreeView 实现以下结构
-- ClassAName
-- -- ClassBType1Name
-- -- -- ClassB1Name
-- -- -- ClassB2Name
-- -- ClassBType2Name
-- -- -- ClassB1Name
-- -- -- ClassB2Name
-- -- ClassC1Name
-- -- ClassC2Name
我设法让树绘制 ClassA
和 ClassB
,但无法弄清楚如何将 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 了解更多详情。
我有一个 class (ClassA)
,其中包含两种不同类型的列表,List of ClassBTypes
和 List of ClassC
。 ClassBTypes
有自己的 List of ClassB
.
我想为 TreeView 实现以下结构
-- ClassAName
-- -- ClassBType1Name
-- -- -- ClassB1Name
-- -- -- ClassB2Name
-- -- ClassBType2Name
-- -- -- ClassB1Name
-- -- -- ClassB2Name
-- -- ClassC1Name
-- -- ClassC2Name
我设法让树绘制 ClassA
和 ClassB
,但无法弄清楚如何将 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 了解更多详情。