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 を Content of Expander として設定する代わりに、Content Template として設定します。

 <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 に答える