2010-08-25 7 views
0

Je développe une application Windows Phome. J'ai ListBox suivant sur une page:ListBox ItemsSource La liaison ne fonctionne pas

<ListBox Margin="10,10,8,8" x:Name="WallList"> 
    <ListBox.ItemsPanel> 
    <ItemsPanelTemplate> 
     <StackPanel /> 
    </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 
    <ListBox.ItemTemplate> 
    <DataTemplate> 
     <Grid x:Name="ListBoxItemLayout" Background="Transparent" Margin="10"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="0.33*"/> 
      <ColumnDefinition Width="0.77*"/> 
     </Grid.ColumnDefinitions> 
     <Image HorizontalAlignment="Left" Margin="0" Source="{Binding ImagePath}" Height="200"/> 
     <StackPanel Margin="5,0,0,0" Grid.Column="1"> 
      <TextBlock x:Name="Name" TextWrapping="Wrap" Text="{Binding Name}" Style="{StaticResource PhoneTextTitle2Style}"/> 
      <TextBlock x:Name="Comment" Margin="0,5,0,0" TextWrapping="Wrap" Text="{Binding Comment}" Style="{StaticResource PhoneTextNormalStyle}" Height="130"/> 
      <TextBlock x:Name="When" TextWrapping="Wrap" Text="{Binding When}" Style="{StaticResource PhoneTextTitle3Style}" VerticalAlignment="Bottom"/> 
     </StackPanel> 
     </Grid> 
    </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

J'utilise ceci pour remplir la zone de liste sur l'événement Loaded:

this.WallList.ItemsSource = StartingWall.GetWallPosts(); 

Et maintenant, je veux ajouter d'autres éléments par programme lorsque l'utilisateur écrire du texte sur un TextBox et cliquez sur un bouton. Je veux placer ce texte sur le champ Commentaire.

Je suis en train de remplir les champs restants avec des données par défaut.

Ma question est:

Comment puis-je ajouter d'autres éléments à ListBox WallList?

Quelqu'un a suggéré de faire ce qui suit:

public ObservableCollection<WallPostEntry> MyWallPosts {get;set;} 

// Initialize MyWallPosts to whatever 

MyWallPosts.Add(new WallPostEntry("new entry")); 

<ListBox Margin="10,10,8,8" x:Name="WallList" ItemsSource="{Binding MyWallPosts}"> 

Mais Reliure ListBox ItemsSource ne fonctionne pas pour moi. Je suis le constructeur d'initialisation MyWallPosts, juste avant InitializeComponent();, comme ceci:

public Wall() 
{ 
    MyWallPosts = StartingWall.GetWallPosts(); 
    InitializeComponent(); 
} 

Un conseil?

Merci.

Répondre

3

Je vois les choses un wierd couple:

premier, vous utilisez la ItemsSource de liaison en un seul endroit, mais la définition explicite dans une autre? la définition de quelque chose dans le code remplacera/défera toutes les liaisons, ce qui pourrait causer un problème (mais il semblerait que vous le régliez de la même manière, cela ne devrait pas faire de différence, mais je supprimerais le this.WallList. ItemsSource = StartingWall.GetWallPosts(); appelez entièrement, et laissez la ItemsSource = "{Binding MyWallPosts}" dans le xaml, le point d'utilisation de bindings est de se débarrasser de ce type de code)

Deuxièmement, vous êtes Définir mywallposts et utiliser une liaison, mais ne pas définir le datacontext sur votre objet lui-même? plus simple dans votre exemple serait de simplement ajouter une ligne à votre constructeur:

public Wall() 
{ 
    DataContext = this; 
    MyWallPosts = StartingWall.GetWallPosts(); 
    InitializeComponent(); 
} 

Ma suggestion suivante serait de simplifier jusqu'à ce qu'il fonctionne. quitter la zone de liste mais commentez tous l'élément/templating de données pour vous assurer que vous ne disposez pas d'un bug dans votre modèle

0

pourrait-il ajouter juste une propriété DataContext à ceci:

<ListBox Margin="10,10,8,8" x:Name="WallList" ItemsSource="{Binding MyWallPosts}"> 

si :

<ListBox Margin="10,10,8,8" x:Name="WallList" ItemsSource="{Binding MyWallPosts}" DataContext="{Binding MyWallPosts}"> 

Existe-t-il un moyen de définir le dataContext de manière déclarative?

tks, Oscar

Questions connexes