2012-10-09 3 views
1

Je suis en train de marcher à travers Windows Store Sample Application client XAML Twitter 1, pour obtenir les mêmes fonctionnalités dans ma propre application. Mais je ne peux pas obtenir de travail de liaison dans 1 à 1 page exemple.Liaison de modèle XAML dans Windows 8

Ceci est mon grille d'affichage des amis:

<GridView x:Name="FriendsGrid" 
        Grid.Row="2" 
        Grid.Column="1" 
        HorizontalAlignment="Left" 
        VerticalAlignment="Top" 
        Margin="10,10,0,0" 
        ItemsSource="{Binding Friends}" 
        ItemTemplate="{StaticResource FriendItemTemplate}" 
        Grid.ColumnSpan="2"> 
     <GridView.DataContext> 
      <Model:FriendsViewModel/> 
     </GridView.DataContext> 

Modèle pour la liaison:

<Page.Resources> 
    <DataTemplate x:Key="FriendItemTemplate"> 
     <Grid Height="200" Width="300"> 
      <Grid.RowDefinitions> 
       <RowDefinition/> 
       <RowDefinition/> 
      </Grid.RowDefinitions> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition/> 
       <ColumnDefinition/> 
      </Grid.ColumnDefinitions> 

      <Image HorizontalAlignment="Left" 
         Height="80" Width="130" 
         Margin="10,10,0,0" 
         VerticalAlignment="Top" 
         Source="{Binding RealPhoto}" 
         Stretch="UniformToFill"/> 

      <TextBlock Grid.Column="1" 
          HorizontalAlignment="Left" 
          Margin="10,10,0,0" 
          TextWrapping="Wrap" 
          VerticalAlignment="Top" 
          Height="80" 
          Width="130" 
          Text="{Binding FirstName}"/> 

      <TextBlock HorizontalAlignment="Left" 
          Margin="10,10,0,0" 
          Grid.Row="1" 
          TextWrapping="Wrap" 
          Text="{Binding LastName}" 
          VerticalAlignment="Top" 
          Width="280" Height="80" 
          Grid.ColumnSpan="2" /> 
     </Grid> 
    </DataTemplate> 
</Page.Resources> 

Dans mon fichier code-behind:

private FriendsViewModel _model; 

    public MyPage() 
    { 
     this.InitializeComponent(); 
     _model = new FriendsViewModel(); 

     FriendsGrid.DataContext = _model; 
    } 

que je ne POPULATE modèle, en application je vois exactement le même nombre d'éléments que j'ai ajouté, mais les éléments sont vides. En utilisant debug je vois, ce modèle n'est pas vide. De même, lorsque je suis codé en dur dans des modèles, ils sont visibles.

Test project on GitHub

+1

Avez-vous implémenté INotifyPropertyChanged? – mydogisbox

+0

FriendsGridViewModel a la propriété ObservableCollection, donc implémente l'événement de modification de propriété. Mais ... vous m'avez aidé à trouver l'erreur: dans mon modèle a oublié d'ajouter des getters et des setters: (( –

Répondre

1

J'ai oublié d'ajouter des accesseurs aux propriétés de mon modèle. Initialement j'avais ceci:

public double Uid; 

Que j'ai ajouté {get; ensemble;}

[DataContract] 
public class Friend 
{ 
    [DataMember(Name = "uid")] 
    public double Uid { get; set; } 

    [DataMember(Name="first_name")] 
    public string FirstName { get; set; } 

    [DataMember(Name="last_name")] 
    public string LastName { get; set; } 

    [DataMember(Name="online")] 
    public bool Online { get; set; } 

    [DataMember(Name = "photo")] 
    public string Photo { get; set; } 

    public ImageSource RealPhoto { get; set; } 
} 
+0

J'ai ajouté mon commentaire comme réponse. – mydogisbox

0

Pour voir des changements dans votre modèle de vue dont vous avez besoin pour mettre en œuvre INotifyPropertyChanged. Une partie de faire ceci appelle NotifyPropertyChanged sur une propriété si sa valeur change.

Questions connexes