2010-05-01 7 views
0

Voici la paix du code XAML de ma page:ComboBox WPF contraignant

  <ComboBox Grid.Row="2" Grid.Column="1" Name="Player2" MinWidth="50" 
       ItemsSource="{Binding PlayersTest}" DisplayMemberPath="ShortName"> 

objet personnalisé est binded au contexte des données de la page:

 page.DataContext = new SquadViewModel(); 

Voici une partie du code source de « SquadViewModel 'class:

public class SquadViewModel 
{ 
    public SquadViewModel() 
    { 
     PlayersTest = new ObservableCollection<SostavPlayerData>(); 
     PlayersTest.Add(new SostavPlayerData { ShortName = "A. Sereda", }); 
     PlayersTest.Add(new SostavPlayerData { ShortName = "D. Sereda", }); 
    } 

    public readonly ObservableCollection<SostavPlayerData> PlayersTest; 

    public string TestText { get { return "Binding works perfectly!"; } } 
} 

Par conséquent, ComboBox doit afficher une liste d'objets, mais il est vide.

Savez-vous pourquoi et comment obtenir cette liste?

Merci.

P.S. J'ai essayé un autre balisage XAML

  <ComboBox Grid.Row="1" Grid.Column="1" Name="Player1" MinWidth="50" 
       ItemsSource="{Binding PlayersTest}"> 
      <ComboBox.ItemTemplate> 
       <DataTemplate> 
        <TextBlock Text="{Binding ShortName}"/> 
       </DataTemplate> 
      </ComboBox.ItemTemplate> 
     </ComboBox> 

Il ne fonctionne pas aussi, mais la liaison au bloc de texte simple:

 <TextBlock Grid.Row="2" Grid.Column="1" Text="{Binding TestText}"/> 

fonctionne parfaitement.

Répondre

3

Le problème est que PlayersTest est un champ, pas une propriété. La liaison ne fonctionne qu'avec les propriétés. Vous pouvez le déclarer en utilisant la syntaxe de propriété auto pour garder le code dans votre point de vue modèle similaire:

public ObservableCollection<SostavPlayerData> PlayersTest { get; private set; } 

Ensuite il vous suffit de le mettre à une nouvelle instance de ObservableCollection<SostavPlayerData>, et vous serez tous ensemble.

+0

Stupide erreur ... :(Merci pour votre aide, ça marche maintenant :) – Budda