locked
Binding en série RRS feed

  • Question

  • Bonjour à tous,

    Avant de poser ma question, voici quelques informations sur mon problèmes.

    Je dispose d'une liste (forums) d'objets forum ayant un certain nombre d'attributs (name, url, categories, ...). categories est elle même une liste d'objets categorie dont chacun possède un certain nombre d'attributs (name, description, ...).

    Je souhaite afficher sous forme de liste hiérarchique les éléments de ma liste de forum ainsi que leurs catégories respectives. J'ai donc deux listes (<ListBox>) emboitées. Voilà ce à quoi ressemble mon code xaml (en en ayant gardé que le nécessaire) :

    <ListBox Name="listForums">
       <ListBox.ItemTemplate>
          <DataTemplate>
             <StackPanel x:Name="ForumPanel">
                <TextBlock Text="{Binding name}" Name="forumName" />
                <ListBox Name="listCategories">
                   <ListBox.ItemTemplate>
                      <DataTemplate>
                         <StackPanel x:Name="CategoriePanel">
                            <TextBlock Text="{Binding ?}" Name="forumCategorieName" />
                            <TextBlock Text="{Binding ?}" Name="forumCategorieDescription" />
                         </StackPanel>
                      </DataTemplate>
                   </ListBox.ItemTemplate>
                </ListBox>
             </StackPanel>
          </DataTemplate>          
       </ListBox.ItemTemplate>
    </ListBox>

    L'ItemsSource de la première <ListBox> est définie dynamiquement lorsque la page est chargée. Je n'ai pas de souci à ce niveau là.

    Ma question est double : comment définir l'ItemSource de ma sous-<ListBox> ? Que mettre alors dans les Binding de cette sous-liste ?

    Merci,

    J. Cordeleir

    mercredi 25 juillet 2012 10:08

Réponses

  • Le contexte de tes bindings en gras est bien une categorie, cela devrait donc fonctionner. 

    Force une hauteur à ta listbox, juste pour voir (il faudra plutot utiliser un itemscontrol, qui n'a pas de scroll lui)

    <ListBox Name="listForums">
       <ListBox.ItemTemplate>
          <DataTemplate>
             <StackPanel x:Name="ForumPanel">
                <TextBlock Text="{Binding name}" Name="forumName" />
                <ListBox Height="200" Name="listCategories" ItemsSource="{Binding categories}">
                   <ListBox.ItemTemplate>
                      <DataTemplate>
                         <StackPanel x:Name="CategoriePanel">
                            <TextBlock Text="{Binding name}" Name="forumCategorieName" />
                            <TextBlock Text="{Binding description}" Name="forumCategorieDescription" />
                         </StackPanel>
                      </DataTemplate>
                   </ListBox.ItemTemplate>
                </ListBox>
             </StackPanel>
          </DataTemplate>          
       </ListBox.ItemTemplate>
    </ListBox>


    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue

    • Marqué comme réponse J. Cordeleir mercredi 25 juillet 2012 14:02
    mercredi 25 juillet 2012 13:04
  • c'est bien une propriété publique ? genre :

    public List<Categories> categories{get;set;}


    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue

    • Marqué comme réponse J. Cordeleir mercredi 25 juillet 2012 14:01
    mercredi 25 juillet 2012 13:49

Toutes les réponses

  • Hello !

    L'ItemsSource de ta "Sous Listbox" sera forcément un membre de l'ItemsSource ta "Listbox principale".

    Les Bindings de tes deux TextBlock sera forcément un membre de.... l'ItemsSource de ta "Sous Listbox".

    En espérant avoir été clair xD

    Cordialement,

    Mafyou.

    mercredi 25 juillet 2012 12:21
  • Ce qui donnerait quelque chose comme :

    <ListBox Name="listForums">
       <ListBox.ItemTemplate>
          <DataTemplate>
             <StackPanel x:Name="ForumPanel">
                <TextBlock Text="{Binding name}" Name="forumName" />
                <ListBox Name="listCategories" ItemsSource="{Binding categories}">
                   <ListBox.ItemTemplate>
                      <DataTemplate>
                         <StackPanel x:Name="CategoriePanel">
                            <TextBlock Text="{Binding name}" Name="forumCategorieName" />
                            <TextBlock Text="{Binding description}" Name="forumCategorieDescription" />
                         </StackPanel>
                      </DataTemplate>
                   </ListBox.ItemTemplate>
                </ListBox>
             </StackPanel>
          </DataTemplate>          
       </ListBox.ItemTemplate>
    </ListBox>

    J'ai essayé cette solution sans succès.

    Je me demande ainsi si dans la sous liste lorsque j'utilise, par exemple, {Binding name} (en gras dans le code), le name auquel je fais référence est bien l'attribut d'une catégorie et non du forum père considéré ...


    J. Cordeleir http://xaaml.wordpress.com

    mercredi 25 juillet 2012 12:45
  • Le contexte de tes bindings en gras est bien une categorie, cela devrait donc fonctionner. 

    Force une hauteur à ta listbox, juste pour voir (il faudra plutot utiliser un itemscontrol, qui n'a pas de scroll lui)

    <ListBox Name="listForums">
       <ListBox.ItemTemplate>
          <DataTemplate>
             <StackPanel x:Name="ForumPanel">
                <TextBlock Text="{Binding name}" Name="forumName" />
                <ListBox Height="200" Name="listCategories" ItemsSource="{Binding categories}">
                   <ListBox.ItemTemplate>
                      <DataTemplate>
                         <StackPanel x:Name="CategoriePanel">
                            <TextBlock Text="{Binding name}" Name="forumCategorieName" />
                            <TextBlock Text="{Binding description}" Name="forumCategorieDescription" />
                         </StackPanel>
                      </DataTemplate>
                   </ListBox.ItemTemplate>
                </ListBox>
             </StackPanel>
          </DataTemplate>          
       </ListBox.ItemTemplate>
    </ListBox>


    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue

    • Marqué comme réponse J. Cordeleir mercredi 25 juillet 2012 14:02
    mercredi 25 juillet 2012 13:04
  • Je viens d'essayé d'imposer une hauteur à la listbox : aucun changement. Je viens aussi d'essayé d'ajouter à la sous liste un textBlock dont le texte est imposé : rien. Il ne semble donc pas que ce soit un problème d'affichage.

    Tout se passe en fait comme si ma liste de catégories était vide (et pourtant elle ne l'est pas, vérifications à l'appui) !


    J. Cordeleir - http://xaaml.wordpress.com

    mercredi 25 juillet 2012 13:26
  • c'est bien une propriété publique ? genre :

    public List<Categories> categories{get;set;}


    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue

    • Marqué comme réponse J. Cordeleir mercredi 25 juillet 2012 14:01
    mercredi 25 juillet 2012 13:49
  • !! La propriété est bien publique mais je l'avais mal initialisée (souci de get; set;) ... Il ne me reste plus qu'un problème de mise en page à régler et c'est parfait.

    Merci beaucoup !


    J. Cordeleir - http://xaaml.wordpress.com

    mercredi 25 juillet 2012 14:01