我有像这样的重复数据结构
public class Chapter
{
public string id { get; set; }
public string name { get; set; }
public List<BPage> pages { get; set; }
public List<SubChapter> chapters { get; set; }
}
public class SubChapter
{
public string name { get; set; }
public string id { get; set; }
public List<BPage> pages { get; set; }
public string ParentPageId { get; set; }
public List<SubChapter> chapters { get; set; }
}
public class BPage
{
public string name { get; set; }
public string label { get; set; }
}
这是我正在使用的xaml,但是这个xaml只给我一个级别的数据。第二级完全缺失
即如果第1章包含2个子章节和页面,则缺少这些信息
第1章
第1页
第2页
第1.1章
第1a页
第1b页
第1.2章
第2a页
第2b页
xaml是
<ListBox ItemsSource="{Binding}" Name="TOCView" ItemContainerStyle="{StaticResource ListBoxItemStyle}">
<ListBox.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding chapters}">
<Expander>
<Expander.Header>
<BulletDecorator>
<Label Style="{StaticResource ResourceKey=ChapterHeadStyle}" Content="{Binding name}"></Label>
</BulletDecorator>
</Expander.Header>
<ItemsControl Margin="25,0,0,0" ItemsSource="{Binding pages}" >
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<Button Tag="{Binding}" Click="btnNavigateToPage_Click" Style="{StaticResource ResourceKey=BookPageStyle}" Content="{Binding Path=label}" >
</Button>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Expander>
</HierarchicalDataTemplate>
</ListBox.ItemTemplate>
</ListBox>
答案 0 :(得分:0)
您的问题是由于您只提供了一个HierarchicalDataTemplate
而引起的,但您想要定义两个层级。因此,您需要为您的第二级提供另一个HierarchicalDataTemplate
。请注意,您不必须在ListBox.ItemTemplate
属性中定义它们,而是在Resources
部分中定义它们:
<HierarchicalDataTemplate DataType="{x:Type YourPrefix:Chapter}"
ItemsSource="{Binding CollectionPropertyInSubChapterClass}">
...
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type YourPrefix:SubChapter}">
ItemsSource="{Binding CollectionPropertyInBPageClass}">
...
</HierarchicalDataTemplate>
只要您不为其中任何一个指定x:Key
指令,它们就会被隐式应用,因此您不必提供任何值对于ListBox.ItemTemplate
属性。