2009-05-04 13 views
1

Also versuche ich Silverlight zu lernen, also habe ich eine einfache Demo-App erstellt, die meinen Home Feed von zieht und die Einträge in einer Liste anzeigt.ListBox füllt Datenbindung nicht in Silverlight 2

Ich habe ein Listenfeld definiert habe:

<ListBox x:Name="lstItems" Margin="5,61,5,5" Grid.Row="1">    
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Margin="8,8,43,8"> 
        <TextBlock Text="{Binding Title}" /> 
       </StackPanel> 
      </DataTemplate> 
     </ListBox.ItemTemplate>    
    </ListBox> 

, die von einem Web-Service-Aufruf bevölkert werden

private void LoginButton_Click(object sender, RoutedEventArgs e) 
{ 
    FriendFeedServiceClient client = new FriendFeedServiceClient(); 
    client.GetHomeCompleted += new EventHandler<GetHomeCompletedEventArgs>(client_GetHomeCompleted); 
    client.GetHomeAsync(FfUsername.Text, FfApiKey.Password); 
} 

void client_GetHomeCompleted(object sender, GetHomeCompletedEventArgs e) 
{ 
    lstItems.DataContext = e.Result; 
} 

Die FriendFeedServiceClient einen Anruf zu einem lokalen Webservice tun, die eine Anforderung Proxies der eigentliche FriendFeed Webservice.

Der Service-Aufruf funktioniert, werden die Elemente zurückgegeben, wenn ich den Anruf debuggen die lstItems.DataContext Eigenschaft mit einer Liste von Elementen mit Daten in sich bevölkert wird, aber die Liste nicht alles angezeigt wird, ist es immer leer. Habe ich etwas verpasst?

Antwort

1


Sie benötigen eine Listbox zu binden, so etwas wie dieses

<ListBox x:Name="lstItems" Margin="5,61,5,5" Grid.Row="1" ItemsSource="{Binding}"> 

und dann der Textblock der auf den Pfad verbindlich Titel funktionieren sollte.

EDIT: Sie setzen die Datacontext, die Art einen Hinweis gibt, dass Sie wahrscheinlich ein benutzerdefiniertes Objekt verbindlich sind, haben Sie versucht, die e.GetResult Ihr benutzerdefiniertes Objekt Gießen, etwas, die gerne von

YourCustomObject obj = (YourCustomObject) e.GetResult; 
lstItems.DataContext = obj; 

HTH

+0

Leider hat sich daran nichts geändert. Der Dienst antwortet immer noch mit den Daten und macht dann nichts. –

+0

Bitte fügen Sie einige Dummy-Werte ein, die Sie in e.GetResult erhalten. Wenn Ihr e.Getresult Ihnen und benutzerdefinierten Geschäftsobjekten nicht sendet, dann versuchen Sie im Code dahinter, die ListBox.ItemsSource anstelle von DataContext festzulegen. –

+0

Ich habe das Problem gefunden, der Dienst hat Objekte zurückgegeben, die fields not properties und while verwendet haben der Dienst würde diese Objekte in debug füllen, sie waren für die XAML-Eigenschaften-Getter nicht verfügbar –

1

Sie sind nicht an DataContext gebunden.

Versuchen Hinzufügen ItemsSource="{Binding}":

<ListBox x:Name="lstItems" Margin="5,61,5,5" Grid.Row="1" ItemsSource="{Binding}"> 

Dann stellen Sie sicher, dass beide Klasse und Title-Eigenschaft des Objekts nicht privat sind. Überprüfen Sie auch die Ausgabe (int Ausgabefenster in Visual Studio), wenn Binding Fehlermeldungen auftreten und lassen Sie es uns wissen.

1

Anstatt DataContext sollten Sie ItemsSource einstellen. Wenn Sie DataContext verwenden, müssen Sie ItemsSource mit einer Bindung festlegen, diese Ebene der Indirektion ist jedoch für das, was Sie versuchen, eher unnötig.

Einzelheiten finden Sie unter MSDN article Daten in der ListBox.

Verwandte Themen