Tovejs binding af data i Windows 8

Sidste uge kiggede vi på INotifyPropertyChanged og INotifyCollectionChanged-grænsefladerne og ObservableCollection-objektet, som er vigtige dele af databindingen i XAML-modellen. I denne uge finder vi ud af, hvordan tovejs-databinding fungerer. Tovejs binding af data vil gøre det muligt for dit brugergrænseflade at foretage ændringer i dataene uden at skulle kende dataene.

Jeg startede med at oprette et simpelt objekt til at indeholde mine data (et heltal og en strengegenskab). Der er ikke noget fancy her, kun to ejendomme. Dette objekt var lidt mere komplekst, end du måske tror; Jeg tilføjede en tredje skrivebeskyttet egenskab, der konstruerede dens værdi ud fra de to andre egenskaber til pænt at formatere dem til output. Jeg implementerede også INotifyPropertyChanged. Jeg fyrede af en PropertyChangedEventHandler til int- og strengegenskaber, når deres indstillede accessor blev kaldt. Derudover fyrede jeg begivenheden for den formaterede værdiegenskap hver gang en af ​​de to andre blev kaldt. Koden findes i kodeeksempel A. Kodeeksempel A
 ved hjælp af system; 
 ved hjælp af System.Collections.Generic; 
 ved hjælp af System.ComponentModel; 
 ved hjælp af System.Linq; 
 ved hjælp af System.Text; 
 ved hjælp af System.Threading.Tasks; 
 navneområde DataBindingDemo 
 { 
 klasse SimpleBoundData: INotifyPropertyChanged 
 { 
 privat int _ værdi; 
 public int IntValue { 
 { 
 return _intValue; 
 } 
 sæt 
 { 
 _intValue = værdi; 
 if (PropertyChanged! = null) 
 { 
 PropertyChanged (dette, nye PropertyChangedEventArgs ("IntValue")); 
 PropertyChanged (dette, nye PropertyChangedEventArgs ("Værdier")); 
 } 
 } 
 } 
 privat streng _stringValue; 
 offentlig streng StringValue { 
 { 
 retur _stringValue; 
 } 
 sæt 
 { 
 _strringValue = værdi; 
 if (PropertyChanged! = null) 
 { 
 PropertyChanged (dette, nye PropertyChangedEventArgs ("StringValue")); 
 PropertyChanged (dette, nye PropertyChangedEventArgs ("Værdier")); 
 } 
 } 
 } 
 offentlige strengværdier 
 { 
 { 
 returner "IntValue:" + IntValue.ToString () + "\ nStringValue:" + StringValue; 
 } 
 } 
 offentlig begivenhed PropertyChangedEventHandler PropertyChanged; 
 } 
 } 

Dernæst byggede jeg løsningen for at gøre klasserne synlige for værktøjet til oprettelse af datakilder. Jeg valgte gitteret, der definerer hovedvinduet i min XAML, og på egenskabsværktøjslinjen oprettede jeg en ny datakontekst, der pegede på min enkle dataklasse. Dette lod mig også indstille standardværdier, hvis jeg ville, skønt det gav mig problemer, da jeg prøvede det (jeg bruger Visual Studio 2012 beta i Windows 8 Release Preview, så det kan være problemet).

På UI-siden af ​​tingene lavede jeg en TextBox og en Slider-kontrol. På hver enkelt valgte jeg egenskaben "Værdi", og der er en lille boks, som du kan klikke på for at oprette en ny databinding. De er opmærksomme på den kontekst, som overordnede net har, og værktøjet tilbød mig egenskaberne fra den enkle dataklasse. Jeg koblet strengegenskaben til TextBox og int-egenskaben til skyderen. Jeg gik nærmere på de ekstra indstillinger for at sikre, at begge var indstillet til at være "tovejs" -bindinger. Derefter lavede jeg en TextBlock og bundte den til den formaterede tekstegenskab. XAML er i kodeeksempel B. Kodeeksempel B
 x: Klasse = "DataBindingDemo.MainPage" 
 IsTabStop = "false" 
 xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
 xmlns: x = "http://schemas.microsoft.com/winfx/2006/xaml" 
 xmlns: lokale = "ved hjælp af: DataBindingDemo" 
 xmlns: d = "http://schemas.microsoft.com/expression/blend/2008" 
 xmlns: mc = "http://schemas.openxmlformats.org/markup-compatibility/2006" 
 mc: ignorable = "d" 
 > 
 Nu til den sjove del! Tryk på knappen Kør, og prøv at redigere teksten eller flytte skyderen rundt, så ser du TextBlock bundet til den formaterede tekst viser os nøjagtigt, hvad vi håber at se ... at ændring af data i kontrollerne har en øjeblikkelig effekt på deres underliggende data, og at vores PropertyChangeEventHandler behandles korrekt ( figur C ). Fig 

Ja, det er Windows 8 i en VM på en Mac. (Klik på billedet for at forstørre det.)

Herfra kunne vi gøre alle slags ting. Det åbenlyse næste trin ville være at ændre få / indstille accessorer, så de interagerer med en ægte datakilde (en database, XML-fil, webtjeneste osv.), Men det er op til dig at håndtere.

J.Ja

Hold dine ingeniørfærdigheder ajour ved at tilmelde dig TechRepublics gratis Software Engineer-nyhedsbrev, der leveres hver tirsdag.

© Copyright 2020 | mobilegn.com