0

如何同时绑定多个级别的数据,例如章节列表和每个章节页面列表下。

我使用的类结构和 xaml 显示在这里

public class ContentsPage
{
    public string  cname{ get; set; }    
    public string label { get; set; }
}

public class Chapter
{
    public string name { get; set; }
    public string id { get; set; }
    public List<ContentsPage> pages { get; set; }
}

public class Model
{
    public List<Chapter> chapters { get; set; }
}



 <ItemsControl x:Name="TopLevelListBox" ItemsSource="{Binding}" >
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel Orientation="Vertical" />
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Expander ExpandDirection="Down" Width="175">
                    <Expander.Header>
                        <StackPanel Orientation="Horizontal">
                            <TextBlock Text="{Binding Path=name}" Margin="0,0,5,0"/>                                
                        </StackPanel>
                    </Expander.Header>
                    <ListBox x:Name="SubListBox" ItemsSource="{Binding Path=enrichments}">
                        <ListBox.ItemTemplate>
                            <DataTemplate>
                                <StackPanel Orientation="Horizontal">
                                    <TextBlock Text="{Binding Path=cname}" />
                                </StackPanel>
                            </DataTemplate>
                        </ListBox.ItemTemplate>
                    </ListBox>
                </Expander>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>

对于绑定,我使用了代码

Model data = new Model();  //load data
 TopLevelListBox.DataContext = data.chapters;

只有我的扩展器标题填充了结果。我需要做什么来填充扩展器内的页面?任何想法或示例链接做同样的事情

4

1 回答 1

0

您的 ItemsControl Item 模板应该有所改变。与其将 ListBox 设置为 Expander 的内容,不如将其设置为内容模板。

 <Expander ExpandDirection="Down"
              Width="175" Content="{Binding}">
        <Expander.Header>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Path=name}"
                           Margin="0,0,5,0" />
            </StackPanel>
        </Expander.Header>
        <Expander.ContentTemplate>
            <DataTemplate>
                <ListBox x:Name="SubListBox"
                         ItemsSource="{Binding Path=enrichments}">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal">
                                <TextBlock Text="{Binding Path=cname}" />
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>

            </DataTemplate>
        </Expander.ContentTemplate>
    </Expander>

并确保您有子项目要显示在 ListBox 中。

于 2013-07-08T12:02:27.387 回答