
Ergebnis 1 bis 2 von 2
-
Bin neu hier
- 27.10.2011, 12:53
- #1
Hi,
ich arbeite mit einer XML Datei und lese diese Datei beim Start aus und binde Sie in eine Liste in der die Überschrift angezeigt wird. Klickt man auf eine dieser Überschrift, dann kommt man auf eine DetailsPage.xaml, die einmal die Überschrift und den Spruch anzeigt. Das klappt auch alles super. Nun aber zu meiner Frage : Wie kann ich einen vorwärts und rückwärts button integrieren, der zwischen den einzelnen Datensätzen hin und herspringt und in einer Schleife läuft bis der Nutzer wieder in die Liste zurückspringt?
Hier der Code für die MainPage.cs :
Code:using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; using Microsoft.Phone.Controls; using System.Xml.Linq; using Microsoft.Phone.Tasks; namespace _99_Redewendungen { public partial class MainPage : PhoneApplicationPage { public MainPage() { InitializeComponent(); try { IRedeRepository redeRepository = new XMLRedeRepository(); this.list.ItemsSource = redeRepository.GetRedeList(); } catch (System.IO.IOException e) { Console.WriteLine("Bitte starten Sie die App neu. Es ist ein Fehler aufgetreten", e.Message); } } private void list_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e) { RedeData selectedItemData = (sender as ListBox).SelectedItem as RedeData; if(selectedItemData != null) { NavigationService.Navigate(new Uri(string.Format("/DetailsPage.xaml?parameter={0}",selectedItemData.SID), UriKind.Relative)); } } } public interface IRedeRepository { IList<RedeData> GetRedeList(); RedeData GetRedeById(int id); } public class SimpleRedeRepository : IRedeRepository { private static List<RedeData> redeList = null; public IList<RedeData> GetRedeList() { return redeList; } public RedeData GetRedeById(int id) { return redeList.FirstOrDefault(c => c.SID == id); } } public class XMLRedeRepository : IRedeRepository { private static List<RedeData> redeList = null; static XMLRedeRepository() { XDocument loadedData = XDocument.Load("spruechle.xml"); var data = from query in loadedData.Descendants("sprueche") orderby query.Element("KID").Value ascending where query.Element("KID").Value.Equals("1") select new RedeData { SID = (int)query.Element("SID"), Ueberschrift = (int)query.Element("KID"), Spruchtext = (string)query.Element("Spruch"), }; redeList = data.ToList(); } public IList<RedeData> GetRedeList() { return redeList; } public RedeData GetRedeById(int id) { return redeList.FirstOrDefault(c => c.SID == id); }}}
Code:using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; using Microsoft.Phone.Controls; using System.Xml.Linq; using Microsoft.Phone.Tasks; namespace _99_Redewendungen { public partial class DetailsPage : PhoneApplicationPage { public DetailsPage() { InitializeComponent(); } protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { base.OnNavigatedTo(e); string parameter = this.NavigationContext.QueryString["parameter"]; RedeData rede = null; int redeId = -1; if (int.TryParse(parameter, out redeId)) { IRedeRepository redeRepository = new XMLRedeRepository(); rede = redeRepository.GetRedeById(redeId); } this.DataContext = rede; } } }
P.S. Die XML Datei sieht in Auszügen so aus :
Code:<spreche> <!-- Tabelle sprueche --> <sprueche> <SID>1</SID> <KID>KategorieNr</KID> <Spruch>Hallo, hier steht der Text</Spruch>
-
Gehöre zum Inventar
- 30.10.2011, 15:11
- #2
Also ich vermute mal stark, dass du schon weißt, dass du in der DetailsPage einfach den DataContext auf das nächste RedeData-Object setzen musst. Du könntest jetzt einfach GetRedeID mit der aktuellen RedeID + 1 aufrufen (so die aufsteigend und durchgehend sind) und wenn keine mehr kommt, dann fängst du halt mit der niedrigsten wieder an.
Aber irgendwie musst du sowieso eine Reihenfolge definieren. Sonst kannst du per LINQ auch einfach die nächst größere holen (also Where(p => p.RedeId > currentRedeID) und aus dem Resultat dann halt die erste nehmen.
Ähnliche Themen
-
Datenverbrauch anzeigen lassen
Von subaru.camui im Forum Windows Phone 7 AppsAntworten: 6Letzter Beitrag: 03.06.2012, 13:01 -
Fotoposition anzeigen lassen?
Von Badflex im Forum Windows Phone 7 AllgemeinAntworten: 6Letzter Beitrag: 03.07.2011, 07:05 -
Datenvolumen Anzeigen lassen
Von peppi1986 im Forum Sony Ericsson Xperia X10 miniAntworten: 5Letzter Beitrag: 06.07.2010, 21:09 -
Opera 10 beta 2; XML Parsing failed
Von steve.jesse im Forum Samsung Omnia IIAntworten: 0Letzter Beitrag: 14.12.2009, 19:44 -
Termine der nächsten X-tage anzeigen?
Von Sandro im Forum PlaudereckeAntworten: 4Letzter Beitrag: 29.09.2003, 19:41
Pixel 10 Serie mit Problemen:...