Daten einer ListBox weiter verarbeiten
Hallo,
meine aktuelle Situation: ich entwickle gerade eine App zum Anzeigen von Cocktail-Rezepten, die App greift über ein Webservice auf eine entfernte Datenbank zu und holt sich die Daten im JSON-Format, danach werden die Daten in einer ListBox ausgegeben. Funktioniert alles soweit.
Mein Problem ist jetzt nur, dass ich nicht wirklich mit den Daten arbeiten kann, ich will zB wenn ich auf ein Item in der ListBox klicke, eine neue Page geöffnet wird und mir die jeweiligen Daten des Items anzeigt. Nur steh ich hier an und weiß nicht weiter. Ich weiß nicht wie ich in der neuen Page mit den Daten arbeiten kann.
MainPage: http://pastebin.com/3gU3ymGK
mit der ListBox
Code:
<ListBox x:Name="CocktailList" Margin="0,0,0,78" Grid.Row="1" SelectionChanged="CocktailList_SelectionChanged"> <ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding id}" Margin="0,0,12,0" />
<TextBlock Text="{Binding name}" Margin="0,0,12,0" Height="60" Style="{StaticResource PhoneTextNormalStyle}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
EDIT: die Daten, die im JSON-Format geladen werden
Code:
[{"id":"0","name":"Pina Colada","image":"pina-colada.jpg","description":"pina-colada.html"},{"id":"5","name":"Tequila Sunrise","image":"tequila-sunrise.jpg","description":"tequila-sunrise.html"},{"id":"1","name":"Whiskey Sour","image":"whiskey-sour.jpg","description":"whiskey-sour.html"},{"id":"2","name":"Sex on the Beach","image":"sex-on-the-beach.jpg","description":"sex-on-the-beach.html"},{"id":"3","name":"Caipirinha","image":"caipirinha.jpg","description":"caipirinha.html"},{"id":"4","name":"Mai Tai","image":"mai-tai.jpg","description":"mai-tai.html"}]
--> Felder "id", "name", "image", "description"
Bitte um Hilfe :)
lg
Daniel
AW: Daten einer ListBox weiter verarbeiten
also so wie ich das verstehe möchtest du einfach das item, welches du anklickst in einer neuen seite anzeigen mit zusätzlichen infos. Ich hab kurz deinen code überflogen. Du willst also einen "Cocktail" detailiert anzeigen lassen in einer neuen seite. es gibt 2 möglichkeiten daten an eine neue Seite zu übergeben.
1) jede Seite hat zugriff auf die App.xaml.cs. D.h. du definierst dort global ein Objekt vom Typ Cocktail und wenn du dein item in der listbox wählst, setzt du den globalen Cocktail mit dem gewählten und greifst in der neuen seite auf den globalen zu.
Am besten als static deklarieren in der App.xaml.cs:
"public static Cocktail _globalCocktail = null;"
und Zugriff erhälst du dann über: "App._globalCocktail = ....."
2)so wie du es schon gemacht hast, einen string mit dem selectedIndex übergeben.
Nur musst du ItemSource, wo sich die Cocktails befinden, global deklarieren, wie ich es schon unter punkt 1) versucht habe zu erklären :D so erhält man am einfachsten einen zugriff drauf. Also ItemSource von der CocktailListe global setzen.
in der neuen Page machst du dann:
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
var data = this.NavigationContext.QueryString;
int item = -1;
if (data.ContainsKey("selectedItem"))
item = data["selectedItem"];
//Hier jetzt den zugriff auf die globale liste mit den cocktails.
//und du hast deine daten in der neuen Page, mit Hilfe des selectedItem-Index
}
Ich hoffe ich konnte dir ein wenig weiterhelfen ;)
MfG
nudels
AW: Daten einer ListBox weiter verarbeiten
danke euch beiden, ja das ist genau das was ich vor habe.... werde es mal probieren und euch danach rückmeldung geben :)
AW: Daten einer ListBox weiter verarbeiten
Hallo,
hab mich wieder nach dem Osterstress zum PC gesetzt und an der App weitergemacht :) habe nun eine
Code:
public static int CocktailId
, auf welche ich auf der Detail-Seite zugreifen kann. Funktioniert.
Meine Frage nun: ist es möglich die ListBox nach der ID zu sortieren? Denn sonst funktioniert die Logik mit dem SelectedIndex nicht, da aktuell die Daten unsortiert in der ListBox ausgegeben werden.
Zweite Frage: in der ListBox werden die Daten via XAML mit
Code:
<TextBlock Text="{Binding id}" Margin="0,0,12,0" />
angezeigt, hier also den Wert im Feld "id". Ich möchte aber wie schon oben beschrieben gerne die Daten eines spezifischen Cocktails anzeigen, und nicht alle Daten in der Tabelle. Wie kann ich das realisieren?
hier mein bisheriger Code: http://pastebin.com/mFmDrbbi
Danke & lg
Daniel