2010-11-13 2 views
0

Hey. J'ai des problèmes de liaison avec XAML. J'ai une liste d'objets Player. Je voudrais que cette liste soit liée à un ListBox et affiche le Name du Player. Pour l'instant, la zone de liste est remplie avec Red.Player (c'est-à-dire le type d'objet et l'espace de noms). Mon style ressource dictionnaire ressemble à ceci:Reliure indiquant le type plutôt que la valeur

<Style x:Key="PlayerListBox" TargetType="ListBoxItem"> 
     <Setter Property="Background" Value="Transparent"/> 
     <Setter Property="BorderThickness" Value="0"/> 
     <Setter Property="BorderBrush" Value="Transparent"/> 
     <Setter Property="Padding" Value="0"/> 
     <Setter Property="HorizontalContentAlignment" Value="Left"/> 
     <Setter Property="VerticalContentAlignment" Value="Top"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="ListBoxItem"> 
        <Border x:Name="LayoutRoot" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" HorizontalAlignment="{TemplateBinding HorizontalAlignment}" VerticalAlignment="{TemplateBinding VerticalAlignment}" d:DesignWidth="231" d:DesignHeight="50"> 
         <VisualStateManager.VisualStateGroups> 
          <VisualStateGroup x:Name="CommonStates"> 
           <VisualState x:Name="Normal"/> 
           <VisualState x:Name="MouseOver"/> 
           <VisualState x:Name="Disabled"> 
            <Storyboard> 
             <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="LayoutRoot"> 
              <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource TransparentBrush}"/> 
             </ObjectAnimationUsingKeyFrames> 
            </Storyboard> 
           </VisualState> 
          </VisualStateGroup> 
          <VisualStateGroup x:Name="SelectionStates"> 
           <VisualState x:Name="Unselected"/> 
           <VisualState x:Name="Selected"/> 
          </VisualStateGroup> 
         </VisualStateManager.VisualStateGroups> 
         <TextBlock TextWrapping="Wrap" Text="{Binding}" FontSize="29.333" TextAlignment="Center"/> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

Je pense que la partie principale est la suivante:

<TextBlock TextWrapping="Wrap" Text="{Binding}" FontSize="29.333" TextAlignment="Center"/> 

J'ai essayé d'utiliser Text="{Binding Name}" mais rien ne montre du tout. Je la mise en ItemsSource lorsque l'utilisateur a sélectionné un joueur:

PlayerList.ItemsSource = ListofPlayers; 

Merci pour toute aide

Répondre

2

est le nom d'une propriété publique du type que vous avez lié à?

-à-dire

public class Person 
{ 
    string name; 
    int age; 

    public string Name 
    { 
     get { return name; } 
     set { name = value; } 
    } 

    public int Age 
    { 
     get { return age; } 
     set { age = value; } 
    } 

} 

Exemple de projet ici la démonstration de liaison de données à une zone de liste.

binding a Linq datasource to a listbox

+0

hey. Oui, c'est une propriété publique. Dans la classe Player, j'ai ceci: 'public string Name {get; ensemble; } ' – Skoder

+0

D'oh, travaillait trop longtemps. J'ai juste eu une propriété sans utiliser le champ privé, donc je n'ai pas eu de nom de retour. Merci. (acceptera la réponse dans 5 minutes, quand je peux :) – Skoder

+0

Heureux que c'est résolu pour vous. Notez que vous pouvez utiliser des extraits de prop dans VS pour aider avec ce genre de choses plutôt que de taper manuellement. –

0

Si vous voulez utiliser {Binding} sans spécifier une propriété, vous pouvez remplacer ToString() pour renvoyer le texte que vous souhaitez afficher.

1

Utilisez la propriété de ListBox.ItemTemplate pour définir la manière dont les données sont affichées en fonction des propriétés.

Par exemple.

<ListBox.DataTemplate> 
    <DataTemplate> 
     <TextBlock Text="{Binding Name}" /> 
    </DataTemplate> 
</ListBox.DataTemplate>
Questions connexes