WPF工具包手风琴 - 如何数据绑定

时间:2010-07-12 09:32:27

标签: wpf wpftoolkit accordion

我一直在尝试(并且失败)使用数据绑定动态创建手风琴。

我有一个名为MenuGroups的集合,它包含一个字符串'ModuleName'和一个名为MenuItems的IList集合。我希望将MenuGroups绑定到标题,将MenuItems绑定到内容。

我到目前为止最接近的是使用此XAML:

<WPFToolkit:Accordion ItemsSource="{Binding MenuGroups}" HorizontalAlignment="Stretch" SelectionMode="OneOrMore">
    <WPFToolkit:Accordion.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding ModuleName}" />
        </DataTemplate>
     </WPFToolkit:Accordion.ItemTemplate>

     <WPFToolkit:Accordion.ContentTemplate>
            <DataTemplate>
                <TextBox Text="{Binding MenuItems/MenuItemName}"/>
            </DataTemplate>
     </WPFToolkit:Accordion.ContentTemplate>
</WPFToolkit:Accordion>

这会正确生成标题,但只有每个组中的第一个菜单项才会显示在内容中。我尝试了上述各种不同的内涵,但到目前为止我还没有达到预期的效果。我在内容模板中尝试使用ListView而不是TextBlock,以为我需要多个项目,但这会产生一个空白内容区域。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

属性路径中的/字符表示绑定到集合中的当前项。由于您没有以其他方式设置当前项目,因此它始终只是第一项。见PropertyPath XAML Syntax

如果您希望内容成为MenuItem的整个列表,则应使用ItemsControl或其中一个子类,例如ListBox

这样的内容会为集合中的每个MenuItem提供一个文本框:

<WPFToolkit:Accordion.ContentTemplate>
    <DataTemplate>
        <ItemsControl ItemsSource="{Binding MenuItems}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <TextBox Text="{Binding MenuItemName}"/>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </DataTemplate>
</WPFToolkit:Accordion.ContentTemplate>