WPF Toolkit Accordion - Как привязать данные - PullRequest
1 голос
/ 12 июля 2010

Я пытался (и не смог) динамически создать аккордеон, используя привязку данных.

У меня есть коллекция с именем MenuGroups, которая содержит строку «ModuleName» и коллекцию IList с именем MenuItems. Я хочу привязать 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 голосов
/ 13 июля 2010

Символ / в пути свойства означает привязку к текущему элементу в коллекции.Поскольку вы не устанавливаете текущий элемент другим способом, он всегда будет первым.См. Синтаксис PropertyPath XAML .

Если вы хотите, чтобы содержимое было полным списком MenuItems, вы должны использовать 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>
...