Windows Phone 7: innbinding av tilpassede ListBox-data

Det endelige utseendet vi sikter til.

I en tidligere Windows Phone-artikkel så vi på hvordan vi kan tilpasse et ListBox Style-element til å inkludere grensesnittwidgets. Denne gangen tar vi et skritt tilbake og begynner å tilpasse dataene som vises.

For å begynne, oppretter du et standard Panorama-program, eller du kan enten bruke eller resirkulere koden fra forrige artikkel. Jeg vil bruke den samme kodebasen som forrige artikkel.

ListBox jeg skal tilpasse er den under overskriften "second item" som inneholder "runtime one" til "runtime sixteen", med røde firkanter ved siden av. Sluttresultatet vil være en liste over nettadresser som starter en Internet Explorer-økt når et element er valgt.

For at vi kan operere på ListBox i kodefilen som inneholder C # -koden, MainPage.xaml.cs for MainPage.xaml, må vi gi ListBox a Name-egenskapen i XAML-erklæringen. Jeg valgte det fantasiløse navnet "SecondLB".

Det bør ikke komme som noen overraskelse å vite at ListBoxes håndterer lister. Derfor, for å legge til alle data vi ønsker i en ListBox, trenger vi bare å opprette listen vi ønsker og sette den som ListBox's ItemsSource. Siden vi skal vise en liste over nettsteder, vil en rask liste over tilpassede objekter som lagrer nettsteddetaljer gjøre det fint.

Det tilpassede objektet kalles Nettsted, og ser slik ut:
public class Website { public String Name { get; set; } public Uri Url { get; set; } public String Description { get; set; } public Uri ImageUrl { get; set; } public Website(String name, Uri url, String description, Uri imageurl) { this.Name = name; this.Url = url; this.Description = description; this.ImageUrl = imageurl; } } 

public class Website { public String Name { get; set; } public Uri Url { get; set; } public String Description { get; set; } public Uri ImageUrl { get; set; } public Website(String name, Uri url, String description, Uri imageurl) { this.Name = name; this.Url = url; this.Description = description; this.ImageUrl = imageurl; } }

public class Website { public String Name { get; set; } public Uri Url { get; set; } public String Description { get; set; } public Uri ImageUrl { get; set; } public Website(String name, Uri url, String description, Uri imageurl) { this.Name = name; this.Url = url; this.Description = description; this.ImageUrl = imageurl; } }

public class Website { public String Name { get; set; } public Uri Url { get; set; } public String Description { get; set; } public Uri ImageUrl { get; set; } public Website(String name, Uri url, String description, Uri imageurl) { this.Name = name; this.Url = url; this.Description = description; this.ImageUrl = imageurl; } }

public class Website { public String Name { get; set; } public Uri Url { get; set; } public String Description { get; set; } public Uri ImageUrl { get; set; } public Website(String name, Uri url, String description, Uri imageurl) { this.Name = name; this.Url = url; this.Description = description; this.ImageUrl = imageurl; } }

public class Website { public String Name { get; set; } public Uri Url { get; set; } public String Description { get; set; } public Uri ImageUrl { get; set; } public Website(String name, Uri url, String description, Uri imageurl) { this.Name = name; this.Url = url; this.Description = description; this.ImageUrl = imageurl; } }

public class Website { public String Name { get; set; } public Uri Url { get; set; } public String Description { get; set; } public Uri ImageUrl { get; set; } public Website(String name, Uri url, String description, Uri imageurl) { this.Name = name; this.Url = url; this.Description = description; this.ImageUrl = imageurl; } }

public class Website { public String Name { get; set; } public Uri Url { get; set; } public String Description { get; set; } public Uri ImageUrl { get; set; } public Website(String name, Uri url, String description, Uri imageurl) { this.Name = name; this.Url = url; this.Description = description; this.ImageUrl = imageurl; } }

public class Website { public String Name { get; set; } public Uri Url { get; set; } public String Description { get; set; } public Uri ImageUrl { get; set; } public Website(String name, Uri url, String description, Uri imageurl) { this.Name = name; this.Url = url; this.Description = description; this.ImageUrl = imageurl; } }

public class Website { public String Name { get; set; } public Uri Url { get; set; } public String Description { get; set; } public Uri ImageUrl { get; set; } public Website(String name, Uri url, String description, Uri imageurl) { this.Name = name; this.Url = url; this.Description = description; this.ImageUrl = imageurl; } }

public class Website { public String Name { get; set; } public Uri Url { get; set; } public String Description { get; set; } public Uri ImageUrl { get; set; } public Website(String name, Uri url, String description, Uri imageurl) { this.Name = name; this.Url = url; this.Description = description; this.ImageUrl = imageurl; } }

public class Website { public String Name { get; set; } public Uri Url { get; set; } public String Description { get; set; } public Uri ImageUrl { get; set; } public Website(String name, Uri url, String description, Uri imageurl) { this.Name = name; this.Url = url; this.Description = description; this.ImageUrl = imageurl; } }

public class Website { public String Name { get; set; } public Uri Url { get; set; } public String Description { get; set; } public Uri ImageUrl { get; set; } public Website(String name, Uri url, String description, Uri imageurl) { this.Name = name; this.Url = url; this.Description = description; this.ImageUrl = imageurl; } }

public class Website { public String Name { get; set; } public Uri Url { get; set; } public String Description { get; set; } public Uri ImageUrl { get; set; } public Website(String name, Uri url, String description, Uri imageurl) { this.Name = name; this.Url = url; this.Description = description; this.ImageUrl = imageurl; } }
La oss nå fylle ListBox når MainPage har lastet, gjør vi dette ved å legge til MainPage_Loaded-metoden:
 List sites = new List(); 

sites.Add (

nytt nettsted (

"Google",

nye Uri ("http://www.google.com/"),

"Søke- og annonsemotor",

nye Uri ("https://www.google.com.au/logos/classicplus.png")

)

);

sites.Add (

nytt nettsted (

"Microsoft",

nye Uri ("http://www.microsoft.com"),

"De laget dette",

nye Uri ("http://upload.wikimedia.org/wikipedia/commons laten/f/f4/Microsoft.svg/220px-Microsoft.svg.png")

)

);

sites.Add (

nytt nettsted (

"Girt by Code",

nye Uri ("http://www.techrepublic.com/blog/australia"),

"Bloggen",

nye Uri ("http://i3.trstatic.com/images/201101/bkg-logo-header-227x43.png")

)

);

sites.Add (

nytt nettsted (

"Eple",

nye Uri ("http://www.apple.com"),

"Et selskap av noen note",

nye Uri ("http://upload.wikimedia.org/wikipedia/en onlangs/9/9f/Apple-logo.svg/200px-Apple-logo.svg.png")

)

);

SecondLB.ItemsSource = nettsteder;

Hvis vi kjører appen i emulatoren, vil du se at ListBox er tom, bortsett fra de røde rutene. Det er et resultat av å sette ItemsSource, men ikke erklære hvilke XML-egenskaper for hvert nettstedobjekt ListBox skal vise.

Å fikse TextBlock-elementene er enkelt. Endre bindingene fra henholdsvis LineOne og LineTwo til Navn og beskrivelse.

Det er litt vanskeligere å bytte ut den røde firkanten med et bilde for hvert nettsted. For å laste et bilde fra en URL, må vi opprette en BitmapImage og laste inn URL-en i UriSource-egenskapen. At BitmapImage er pakket inn i den vanlige Image's Source-egenskapen. Ettersom nettstedobjektet lagrer URL-en til bildet vi ønsker å bruke i ImageUrl-egenskapen, trenger vi bare å opprette riktig innbinding:

Når vi kjører appen nå, vises nettstedene riktig.

Du kan når som helst endre overskriften "andre element" på det andre PanoramaItem til "nettsteder" eller et annet navn du anser som passende.

Det er på tide å åpne Internet Explorer når et nettsted er valgt. Legg til i ListBox XAML-erklæringen:

 SelectionChanged="SecondLB_SelectionChanged" 

Det vil kalle metoden SecondLB_SelectionChanged hver gang en bruker velger et element i ListBox.

I C # vil vi ta det valgte elementet, listBox.SelectedItem, kaste det til nettstedets objekt og sende det til Internet Explorer via klassen WebBrowserTask i navnefeltet Microsoft.Phone.Tasks.

 private void SecondLB_SelectionChanged(object sender, SelectionChangedEventArgs e) 

{

ListBox listBox = avsender som ListBox;

if (listBox! = null && listBox.SelectedItem! = null)

{

Nettsted sItem = (Nettsted) listBox.SelectedItem;

WebBrowserTask webBrowserTask = ny WebBrowserTask ();

webBrowserTask.Uri = sItem.Url;

webBrowserTask.Show ();

}

}

Det tomme, hvite rommet under innholdet skal ikke være der.

Når vi kjører applikasjonen, lastes de forskjellige nettstedene som forventet i en fullstendig Internet Explorer-forekomst.

Noen ganger vises det en feil som vil male Internet Explorer-menyen og adressefeltet som en hvit blokk. Den nåværende visdommen er at dette skyldes at feilløseren er festet, og når avluseren ikke brukes, vil den male riktig.

Når du laster inn et nettsted i IE og trykker på tilbake-knappen for å gå tilbake til programmet vårt, vil du legge merke til at hvis du velger det samme nettstedet igjen, laster det ikke. Dette skyldes at ListBox husket valget du gjorde da det lanserte WebBrowserTask. Ettersom begivenhetslytteren vår er bundet til SelectionChanged-hendelsen og utvalget ikke endres, mislykkes hendelsen.

En enkel løsning er alt som trengs. Når brukeren trykker på tilbake-knappen fra IE og returnerer appen vår, kaller den metoden Page.OnNavigatedTo. Hvis vi setter ListBoxes valgt indeks til minus en, kan vi deretter velge det samme elementet på nytt når vi går tilbake til siden.

 protected override void OnNavigatedTo(NavigationEventArgs e) 

{

base.OnNavigatedTo (e);

SecondLB.SelectedIndex = -1;

}

Og der går vi; glede deg over å binde ListBoxes til ditt hjerte innhold.

© Copyright 2021 | pepebotifarra.com