具有多个 类 的递归树视图
Recursive Treeview with multiple classes
设置
我有一个带有 ObservableCollection<StructureItem>
的 ViewModel 和一个用于显示它的视图。
class 本身是递归的:
public class StructureItem
{
public List<StructureItem> Children { get; set; } = new List<StructureItem>();
public List<IoItem> Ios { get; set; } = new List<IoItem>();
public string Name { get; set; }
}
这里是 IoItem
public class IoItem
{
public string Name { get; set; }
public int Position { get; set; }
}
目前xaml为TreeView
<TreeView ItemsSource = "{Binding Structure}">
<TreeView.Resources>
<DataTemplate DataType="kernel:IoItem">
<Label Content="{Binding Name}"></Label>
</DataTemplate>
</TreeView.Resources>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}" DataType="kernel:StructureItem">
<Label Content="{Binding Name}"></Label>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
问题
我尝试了多种不同的 xaml,但我得到的最好结果是 StructureItem
显示正确(见上文)。 IoItem
要么被忽略,要么破坏整个 Treeview。
如何使用xaml显示这个结构?
如果您想查看 IoItem
的名称,只需将它们添加到 ItemTemplate
,例如ListBox
:
<TreeView ItemsSource = "{Binding Structure}">
<TreeView.Resources>
<DataTemplate DataType="{x:Type kernel:IoItem}">
<Label Content="{Binding Name}"></Label>
</DataTemplate>
</TreeView.Resources>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}" DataType="kernel:StructureItem">
<StackPanel>
<Label Content="{Binding Name}"></Label>
<ListBox ItemsSource="{Binding Ios}"/>
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
设置
我有一个带有 ObservableCollection<StructureItem>
的 ViewModel 和一个用于显示它的视图。
class 本身是递归的:
public class StructureItem
{
public List<StructureItem> Children { get; set; } = new List<StructureItem>();
public List<IoItem> Ios { get; set; } = new List<IoItem>();
public string Name { get; set; }
}
这里是 IoItem
public class IoItem
{
public string Name { get; set; }
public int Position { get; set; }
}
目前xaml为TreeView
<TreeView ItemsSource = "{Binding Structure}">
<TreeView.Resources>
<DataTemplate DataType="kernel:IoItem">
<Label Content="{Binding Name}"></Label>
</DataTemplate>
</TreeView.Resources>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}" DataType="kernel:StructureItem">
<Label Content="{Binding Name}"></Label>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
问题
我尝试了多种不同的 xaml,但我得到的最好结果是 StructureItem
显示正确(见上文)。 IoItem
要么被忽略,要么破坏整个 Treeview。
如何使用xaml显示这个结构?
如果您想查看 IoItem
的名称,只需将它们添加到 ItemTemplate
,例如ListBox
:
<TreeView ItemsSource = "{Binding Structure}">
<TreeView.Resources>
<DataTemplate DataType="{x:Type kernel:IoItem}">
<Label Content="{Binding Name}"></Label>
</DataTemplate>
</TreeView.Resources>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}" DataType="kernel:StructureItem">
<StackPanel>
<Label Content="{Binding Name}"></Label>
<ListBox ItemsSource="{Binding Ios}"/>
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>