WPF ItemsControl中的多个绑定级别

时间:2013-07-08 11:54:19

标签: wpf data-binding

如何在同一时间内绑定多个级别的数据,如章节列表和每个章节页面列表。

我使用的类结构和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;

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

1 个答案:

答案 0 :(得分:0)

您的ItemsControl项目模板应该稍微改变一下。不要将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中显示的子项。