To-veis bindende data i Windows 8

I forrige uke så vi på INotifyPropertyChanged og INotifyCollectionChanged-grensesnittene og ObservableCollection-objektet, som er viktige deler av databindingen i XAML-modellen. Denne uken vil vi finne ut hvordan toveis databinding fungerer. Toveis datainbinding gjør at brukergrensesnittet ditt kan gjøre endringer i dataene uten å måtte vite detaljene til dataene.

Jeg startet med å lage et enkelt objekt for å oppbevare dataene mine (et heltall og en strengegenskap). Det er ikke noe fancy her, bare to eiendommer. Dette objektet var litt mer sammensatt enn du kanskje tror; Jeg la til en tredje skrivebeskyttet eiendom som konstruerte verdien fra de to andre egenskapene for å formatere dem til utdata. Jeg implementerte også INotifyPropertyChanged. Jeg fyrte av en PropertyChangedEventHandler for int- og strengegenskapene da deres faste accessor ble kalt. I tillegg fyrte jeg av hendelsen for den formaterte verdi-egenskapen hver gang en av de to andre ble oppringt. Koden er i kodeeksempel A. Kodeprøve A
 bruker System; 
 bruker System.Collections.Generic; 
 bruker System.ComponentModel; 
 bruker System.Linq; 
 bruker System.Text; 
 bruker System.Threading.Tasks; 
 navneområde DataBindingDemo 
 { 
 klasse SimpleBoundData: INotifyPropertyChanged 
 { 
 private int _intValue; 
 offentlig int Intalue { 
 { 
 return _intValue; 
 } 
 sett 
 { 
 _intValue = verdi; 
 if (PropertyChanged! = null) 
 { 
 PropertyChanged (dette, nye PropertyChangedEventArgs ("IntValue")); 
 PropertyChanged (dette, nye PropertyChangedEventArgs ("Values")); 
 } 
 } 
 } 
 privat streng _stringValue; 
 offentlig streng StringValue { 
 { 
 retur _strengValue; 
 } 
 sett 
 { 
 _stringValue = verdi; 
 if (PropertyChanged! = null) 
 { 
 PropertyChanged (dette, nye PropertyChangedEventArgs ("StringValue")); 
 PropertyChanged (dette, nye PropertyChangedEventArgs ("Values")); 
 } 
 } 
 } 
 offentlige streng Verdier 
 { 
 { 
 returner "IntValue:" + IntValue.ToString () + "\ nStringValue:" + StringValue; 
 } 
 } 
 offentlig arrangement PropertyChangedEventHandler PropertyChanged; 
 } 
 } 

Deretter bygde jeg løsningen for å gjøre klassene synlige for datakildesverktøyet. Jeg valgte rutenettet som definerer hovedvinduet i min XAML, og på verktøylinjen for egenskaper opprettet jeg en ny datakontekst, og pekte den mot min enkle dataklasse. Dette lot meg også sette standardverdier hvis jeg ville, men det ga meg problemer da jeg prøvde det (jeg bruker Visual Studio 2012 beta på Windows 8 Release Preview, så det kan være problemet).

På UI-siden av tingene laget jeg en TextBox og en skyvekontroll. På hver av dem valgte jeg egenskapen "Verdi", og det er en liten boks du kan klikke for å opprette en ny databinding. De er klar over konteksten som foreldre Grid har, og verktøyet tilbød meg egenskapene fra den enkle dataklassen. Jeg koblet strengegenskapen til TextBox og int-egenskapen til glidebryteren. Jeg gikk inn på tilleggsinnstillingene for å sikre at begge var satt til å være "toveis" -bindinger. Så lagde jeg en TextBlock og bundet den til den formaterte tekstegenskapen. XAML er i kodeeksempel B. Kodeprøve B
 x: Class = "DataBindingDemo.MainPage" 
 IsTabStop = "false" 
 xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
 xmlns: x = "http://schemas.microsoft.com/winfx/2006/xaml" 
 xmlns: lokale = "bruker: DataBindingDemo" 
 xmlns: d = "http://schemas.microsoft.com/expression/blend/2008" 
 xmlns: mc = "http://schemas.openxmlformats.org/markup-compatibility/2006" 
 mc: ignorerbart = "D" 
 > 
 Nå for den morsomme delen! Trykk på Kjør-knappen og prøv å redigere teksten eller flytte glidebryteren rundt, så ser du TextBlock bundet til den formaterte teksten viser oss nøyaktig hva vi håper å se ... at å endre dataene i kontrollene har en umiddelbar effekt på deres underliggende data, og at PropertyChangeEventHandler blir behandlet ordentlig ( figur C ). Figur C 

Ja, det er Windows 8 i en VM på en Mac. (Klikk på bildet for å forstørre.)

Herfra kunne vi gjøre alle slags ting. Det åpenbare neste trinnet ville være å endre get / set-accessorene slik at de samhandler med en ekte datakilde (en database, XML-fil, webtjeneste, etc.), men det er opp til deg å håndtere.

J.Ja

Hold dine tekniske ferdigheter oppdatert ved å registrere deg på TechRepublics gratis nyhetsbrev om Software Engineer, levert hver tirsdag.

© Copyright 2021 | pepebotifarra.com