2010-09-21 7 views
1

Ce que j'essaie de faire est de créer une sorte de "pièces" (comme un groupe de discussion, un centre de partage ou tout ce que vous voulez). Toutes les pièces sont créées de la même manière, mais chacune d'entre elles contient des informations différentes. Chacune de ces pièces est contenue dans un TabItem. J'ai réussi à créer dynamiquement tous les tabitems, pour leur donner une grille et un canevas. Mais pour le moment je suis confronté à un problème: J'ai créé un ControlMode appelé RoomMenu qui montrera différents boutons et, le plus important, les personnes connectées dans cette pièce dans un ListBox (je récupère ces personnes à partir d'un WebService chaque fois que je change Tabitem). Mais comme ma ListBox est dans un ControlTemplate, je n'ai aucune idée de la façon d'accéder à ListBox ItemSource pour lier une liste générique. Ci-dessous est le code utilisé pour créer mes chambres et leur contenu.Comment lier des données à un ListBox dans un ControlTemplate?

Voici ma classe de menu chambre:

public class RoomMenu : ContentControl 
{ 
    public RoomMenu() 
    { 
     DefaultStyleKey = typeof(RoomMenu); 
    } 

    public string Current_room_id; 
    public string FullName; 
    public string Rights; 
} 

Et voici le ControlTemplate situé dans generic.xaml:

<Style TargetType="test:RoomMenu"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="test:RoomMenu"> 
       <Grid x:Name="MenuGrid"> 
        <Border HorizontalAlignment="Stretch" VerticalAlignment="Stretch" BorderBrush="Black" CornerRadius="2" Background="Black"> 
         <StackPanel Orientation="Vertical"> 
          <Border x:Name="Room_friend_border" Background="Gray" CornerRadius="4" Margin="5"> 
           <ListBox x:Name="current_room_friends" ItemsSource="{Binding ''}" Margin="5" Height="230"> 
            <ListBox.ItemTemplate> 
             <DataTemplate> 
              <StackPanel Orientation="Horizontal"> 
               <TextBlock Text="{Binding FullName}" Height="20"/> 
               <TextBlock Text="{Binding Rights}" Height="20"/> 
              </StackPanel> 
             </DataTemplate> 
            </ListBox.ItemTemplate> 
           </ListBox> 
          </Border> 
          <Border x:Name="Room_menu" Background="Gray" CornerRadius="4" Margin="5"> 
           <StackPanel Orientation="Vertical" Margin="10"> 
            <Button Content="Add item" Margin="0,2,0,2"/> 
            <Button Content="Set changes" Margin="0,2,0,2"/> 
            <Button Content="Invite friend" Margin="0,2,0,2"/> 
            <Button Content="Rename room" Margin="0,2,0,2"/> 
            <Button Content="Delete room" Margin="0,2,0,2"/> 
           </StackPanel> 
          </Border> 
         </StackPanel> 
        </Border> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Voici ma classe Dictionnary qui contient le RoomMenu:

public class Rooms : TabItem 
{ 
    public string Room_guid; 
    public string Room_name; 
    public string Primary_user_guid; 
    public string Room_version; 

    public Grid Room_grid; 
    public Canvas Room_canvas; 
    public RoomMenu Room_menu; 
} 

Et c'est quand j'appelle mon ControlTemplate et l'ajoute à ma grille TabItem:Je suis désolé si toute la question est un peu longue mais c'était la seule façon d'expliquer clairement ce que j'essayais de faire. Donc, si quelqu'un pouvait me donner un indice ou une réponse pour faire une liaison de données dans un ControlTemplate, cela m'aiderait énormément.

Merci.

Répondre

1

Je pense que vous avez commencé dans la mauvaise direction lors de l'instanciation d'éléments d'interface utilisateur dans le code. Le code derrière ne doit contenir qu'une seule ligne assignant la liste de personnes au currentContext de current_room_friends. Commencez avec des exemples plus simples de données de liaison à un ListBox comme beautiful planet example de Bea Stollnitz.

+0

Je pense que je vais le faire comme vous l'avez dit, même si c'est un peu limité par rapport à ce que j'avais l'intention de faire. – Aymeric

Questions connexes