2010-07-12 3 views
1

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

У меня есть коллекция под названием 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 в шаблоне контента, думая, что мне понадобится это для нескольких элементов, но это создало пустую область содержимого.

Может ли кто-нибудь помочь?

ответ

0

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

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

Привет - спасибо за Ваш ответ. Как я уже сказал в своем оригинальном посте, я пробовал список без успеха. Теперь я использую другую структуру данных и по какой-то причине это разрешило мою проблему. – Sean

Смежные вопросы