Kezdőlap > Windows 8 > WinRT API hiányosságok – I. rész (Binding)

WinRT API hiányosságok – I. rész (Binding)

2013. március 26. kedd Hozzászólás Go to comments

A történet onnan indul, hogy a Winmagazin oldalon posztoltam egy olyat, hogy szerintem az egész WinRT API egy ipari hulladék.

Konkrétan ezt írtam:

“Jó írás. Én is kidobnám a francba az egész Metro-t. 1 alkalmazást se használok róla. Egyszerűen rosszabb a minősége is, meg kényelmetlenebb is. Van Windows 8-as tabletem is, de kb semmi értelmet a Tablet módnak ezen a rendszeren. (Inkább vettem volna iPad-et) A metro api egy ipari hulladék, de tényleg. Bár aki fejlesztett WPF-re / Silvertlightra az gyorsan meg tudja tanulni. Igaz rengeteg korlát van benne, komoly alkalmazásokat (játékokon) kívűl nem érdemes / "lehet" benne írni. De mondjon valaki 1 jó Metros alkalmazást amit minden nap használ, és inkább azt használja mint a Windows-osat. Maga az OS nem volna olyan borzalmas. Viszonylag stabil, driverekkel sincs nagyon probléma (legalább is nekem) de ez a Metro (vagy ModernUI) egyszerűen siralmas szerintem.”

Egyszer csak megjelent a devportálon egy fórumbejegyzés, amely rám hivatkozva és idézve (háh idéznek tőlem! Ezt is megéltem!) a srác kirobbantott egy vitát. Nagyon sokan posztoltak erre, hogy miért rossz vagy épp miért jó a Windows 8 és a WinRT API. Bár én inkább API-ra gondoltam a kritika alatt nem pedig a rendszer hiányosságaira, de bevallom nagy részükkel egyetértek. (Kövezz meg MS! :)) Mondjuk ettől függetlenül a rendszerrel kevesebb bajom van mint a WinRT API-val.

A következő néhány írásomban egy-egy API beli hiányosságot fogok leírni. Félre értés ne essék, nem azért, hogy "leszóljam” a rendszert, azt megteszik helyettem mások – Ezt a devportálon írjátok meg, ha van ilyen. Ha szeretitek azt is – , hanem azért, hogy ha fejlesztő vagy és belefutsz ezekbe a hibákba, akkor ne érjen váratlanul, hogy Óóó a fene ez miért nem megy?!. Hisz WPF vagy SL alatt tökéletesen működött ez a kódsor.

Kezdjük el.

BINDING!

A binding azaz az adatkötés bátran kijelenthetjük, hogy a XAML alkalmazások alapja. Aki fejlesztett WPF-re vagy Silverlight-ra az ezzel tisztában van. Aki ráadásul “jól” fejlesztett és MVVM-et használt akkor pláne tudja, hogy létszükséglet. (Véleményem szerint, aki nem MVVM-be fejleszt WPF/SL/WP8/Windows 8 alá, az mélyen, nem ismeri a rendszer képességeit. – Ezért is meg lehet kövezni. Ez szubjektív vélemény.) Szóval itt van ez a rendszer és ott van a Binding. Az, hogy hiányos és gáz a Binding az egy dolog, de tegnap egyik kollégám (Mr. X) hívta fel erre az aprócska “hibára” figyelmemet.

Tegyük fel, hogy van egy tulajdonságot ami decimal típusú. Ez a ViewModel-ben van.

public class MainViewModel : INotifyPropertyChanged
{
        private decimal price;
        public decimal Price
        {
            get { return price; }
            set
                price = value;
                OnPropertyChanged("Price");
            }
        }

}

Ez a tulajdonság kötve van egy TextBox-hoz. A kötés kétirányú!

<TextBox Text="{Binding Price, Mode=TwoWay}"/>

Az ember ilyenkor azt várná, hogy ha megváltoztatja a TextBox tartalmát, akkor az a tulajdonság ami hozzá kötve van szintén meg fog változni. Ezért is kötés, ráadásul kétirányú. Cserébe viszont csak ezt a hibaüzenetet kapunk az output Window-ra:

Error: Cannot save value from target back to source. BindingExpression: Path=’Price’ DataItem=’App8.MainViewModel’; target element is ‘Windows.UI.Xaml.Controls.TextBox’ (Name=’null’); target property is ‘Text’ (type ‘String’).

Ugyanis ez a csodás API nem tud kötni kétirányúan se decimal, se byte típushoz. Igen, írd át a kódodat double-ra vagy épp int-re, mert a decimal az ööö hát az nincs támogatva. Hiába azt használjuk, pl. Árak reprezentálására, nem azt nem kötheted. Tehát, ha WinRT-t használtok és adatkötést szeretnétek nem biztos, hogy a decimal, és még néhány típus megfelelő lesz a számotokra.

Felhívnám még a figyelmet, hogy UpdateSourceTrigger-t se nagyon keressetek a kötésnél…

Persze ez csak 1 hiányosság a sok közül. Amibe belefutok, majd leírom még. Ha esetleg ti is belefutottatok hasonló szépségekbe, kérlek írjátok meg a kommentek között.

Konklúzióm:

Azt lehet mondani, hogy ez V1, meg hogy a Silverlight is milyen volt amikor kijött, és, hogy-hogy felfejlődött, de azt ne felejtsük el, hogy a Silverlight az Online platform volt! Plusz igen, valóban leváltja a WinRT az őskori Win32-t mert csudaúj és a Win32 hibáit itt nem követik el, de ahhoz jó alapok kellenek, és ez a változatt még nem az. A blue-val meg jön egy szép szerviz csomag. Ott arra leszek kíváncsi, hogy ezeket a hibákat, hogy javítják, mert bizonyos esetekben akkor nem lesz kompatibilisek a mostani alkalmazások az újjal. (Lásd Converterek és használatuk. Következő cikkben leírom)

Jó tudom, hogy API szintjén nem sok embert érdekel a WinRT, de azért a Windows 8-hoz ez is hozzá tartozik, és aki foglalkozik vele, belefuthat ebbe.

Reklámok
  1. eMeL
    2013. március 27. szerda - 01:04

    Már hogyne érintene ‘minden’ felhasználót?

    A felhasználók a programozók munkáit használják.
    Azok alapján döntik el, hogy az oprendszer ér-e valamit.
    Mondok rosszabbat, a felhasználóim gyakran az én programjaim alapján döntik el, hogy a hardver értékes-e: “Nem fut ezen a gépen a PROGRAM!” Vagyis a “gép” (hardverestől, oprendszerestől, adatbáziskezelőstől, internetkapcsolatostól stb.) szemétnek lett titulálva, az okot egy mezei nyúzer nem is akarja kutatni, csak a végeredmény játszik.

    Szóval ha nem jó az API, akkor a készülő programok is hibásak (legalábbis nem optimálisak) lesznek, és ez alapján dönt a felhasználó is.

  2. 2013. március 31. vasárnap - 23:05

    I truly appreciate this post. I have been looking everywhere for this! Thank goodness I found it on Bing. You have made my day! Thanks again

  1. 2013. március 27. szerda - 16:16
  2. 2013. március 27. szerda - 16:40

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s

%d blogger ezt kedveli: