Második feladatok – 4. rész

A mai napon a MVVM (Model-View-ViewModel) mintapéldához láttam hozzá. Először egy kép, hogy hogyan is néz ki egy ilyen minta:

A Model feladata az üzleti logikával való interakció fenntartása. Itt kérhetünk ki adatokat az adatelérési rétegből, kommunikálhatunk szolgáltatásokkal.

A View kizárólag az adott felhasználói felületet tartalmazza, mögöttes kódjában nem találhatók objektumok az üzleti logikából.

A sorból már csak a ViewModel maradt ki, melynek feladata a kettő összekapcsolása.

A példát magát is elkezdtem, egyelőre félkész állapotban van.

 

Inkább az animációkkal foglalkoztam, legelsőnek a villogó gombbal, ami kisebb fejtörést okozott, de végül sikerült megoldani a dolgot.

Nézzük a demót.

Elsőnek Visual Studioban létrehoztam egy új projektet. A Program.cs-be dolgoztam. Először a névtereket írtam be, hogy miket fogok használni a program során:

Utána létrehoztam a saját névteremet, az osztályt, majd a szükséges változóimat.

Majd következik a “szokásos” konstruktor, és ennek “részletezése” (2 részletben):

Majd a villogást úgy oldottam meg, hogy egy segédváltozót el kezdek növelgetni a végtelenbe egyesével, majd ha páros a szám, akkor nem látszódik a gomb, ha páratlan, akkor látszódik. Így egy villogó hatást értünk el.

Majd végül a main, amibe létrehozzuk a gombot.

Magát a projektet pedig innen lehet letölteni: Villogo_Gomb

 

Második feladatok – 3. rész

A 3 vezérlőnek (ListView, FlipView és Virtualization) néztem utána.

ListView:

  • ugyanaz, mint a GridView
  • a GridView a ListViewBase osztályból származik, listás adatok megjelenítésére szolgáló vezérlő, a Windows 8 szinte minden alkalmazásában megtalálható valamilyen formában

FlipView:

  • listás vezérlő
  • nem elemek listáját jeleníti meg egyszerre, hanem a listából mindig csak egyet, az aktuálisan kiválasztott, pozicionált elemet.
  • automatikusan biztosítja a navigációt az elemek között egérrel és érintésgesztusokkal egyaránt.

A Virtualization-ről nem esik szó a könyvben, illetve máshol se találtam róla információt.

Calendar event helyett ScheduledToastNotification

Mivel Windows 8 alkalmazásban még nem férünk hozzá a naptárhoz, ezért naptári események helyett, időzített emlékeztetőket vehetünk fel, amelyek a felhasználó által kiválasztott időpontban aktiválódnak. Az időpont kiválasztását a Callisto bővítmény jövőben megjelenő DatePicker és TimePicker controlok segítségével tervezem megvalósítani.

Az emlékeztető előnye, hogy akkor is felugrik, ha az alkalmazás éppen nem fut, valamint beállítható hogy bizonyos időközönként ismételve megjelenjen az emlékeztető. Továbbá részletesen testre szabható a kinézete, akár képet is megjeleníthetünk a szöveg mellett.

Hátránya, hogy nem olyan átlátható mint a naptár. Ennek megoldására a felvett emlékeztetőket hozzáadom egy listához, és megjelenítem ItemGridView controlban, így átlátható, hogy mikor és milyen emlékeztetők fognak előugrani a jövőben, és az itt lévő emlékeztetőket akár ki is törölhetem.

Az emlékeztetőkkel egyidejűleg az alkalmazás csempéjére is beállíthatóak időzített változások, ekkor a csempén jelennek meg az emlékeztető információi, melynél szintén testre szabható a kinézet, ám itt a csempe méretétől függően több kinézetet is definiálnunk kell.

Egy fontos dolog, amit sajnos az msnd oldala is figyelmen kívül hagy: Az alkalmazásunk appmanifest beállításaiban a Toast Capable tulajdonságot állítsuk “Yes”-re, mert enélkül nem jelennek meg az emlékeztetők.

Második feladatok – 2. rész

A feladataim közt volt átnézni az alkalmazás életcikluást és ennek debuggolását. Ez az első feladatok közt is szerepelt, de ekkor elegendő információt nem találtam. Viszont a most kapott win8 könyvben pár oldalon erről volt szó.

Az új életciklus modell szerint 3 állapota lehet egy alkalmazásnak:

  • működő alkalmazás,
  • megállított alkalmazás, vagy
  • terminált alkalmazás.

Amikor elindítjuk alkalmazásunkat, akkor lépünk az első állapotba, azaz a működő alkalmazásba. Ha “pihentetjük” az alkalmazásunkat, vagy egy másik alkalmazást indítunk, akkor az alkalmazásunk a megállított állapotba kerül át. Ha visszatérünk eredeti alkalmazásunkhoz, akkor ismét működik az alkalmazásunk. Ha túl régen használtuk az alkalmazást, vagy az operációs rendszer úgy találja, hogy az operatív memória fogyóban van, akkor véglegesen bezárhatja az alkalmazásunkat, mely az állapot mentésének hiányában elveszítheti a felhasználó a teljes munkafolyamatát. Ekkor az alkalmazásunk a terminált állapotban van.

A könyvben még megtalálható a windows 8 stílusú alkalmazások állapotai. Ezek a következők:

  • NotRunning
  • Running
  • Suspended
  • Terminated
  • ClosedByUser

A NotRunning akkor következik be, amikor először fut az alkalmazás, azaz a Windows Store-ból lett telepítve, vagy a Task Manager segítségével zárták be az alkalmazást, vagy felhasználói ki-/bejelentkezés történt, vagy a számítógépet újraindították. Ezeket úgy kezelhetjük, hogy a szokásos módon inicializáljuk és jelenítsük meg az alapértelmezett felhasználói felületet.

A Running akkor következik be, ha a programot a csempéje vagy valamelyik integrációs esemény segítségével indították el. Ekkor le kell kezelni az Activation eseményt.

A Suspended esetén a program pihentetésre került, mivel nem történt egy ideje felhasználói reakció. Ekkor szintén le kell kezelni az Activation eseményt.

A Terminatednél a rendszer kezd kifogyni az erőforrásaiból (pl. tápellátás, szabad operatív memóriaterület, stb…), így kénytelen az alkalmazásunkat pihentetett állapotból véglegesen leállítani. Ilyen esetben a mentett adatokat állítsuk vissza, törekedjünk a felhasználói munkafolyamat szakadásmentes, hiánytalan visszaállítására. Használjuk ehhez az alkalmazásszintű eseményeket!

A ClosedByUser akkor történik meg, ha több, mint 10mp telt el az Alt+F4 vagy bezárás gesztus alapú bezárási események óta. Ilyenkor inicializáljunk a szokásos módon, jelenítsük meg az alapértelmezett felhasználói felületet és indítsunk egy friss munkafolyamatot.

Pár fontos tényező:

  • A pihentetett állapotból lezárásra kerülő alkalmazásokat nem figyelmezteti a Windows 8. A bezárás oka csak a következő futtatáskor derül ki.
  • A Windows 8 stílusú alkalmazásokat úgy tervezték, hogy nem számolunk a felhasználó általi valódi bezárással (Alt+F4), inkább az operációs rendszerre bízzuk az alkalmazások kezelését. Ha mégis valódi bezárás történt, külön lekérdezhető az ApplicationExecutionState felsorolt típus segítségével.
  • Az alkalmazás eltávolításával egy időben az alkalmazáshoz tartozó lokális adatok is eltávolításra kerülnek.
  • Az alkalmazás a Contract & Extension megközelítés segítségével mélyebben integrálható, mely azt jelenti, hogy az konkrét céllal is indítható (pl: fénykép készítése, fájl megnyitása, keresés indítása, stb.). A speciális esetek lekezelése mind az OnLaunched eseményen keresztül történik.

 

Az animációkhoz kerestem anyagot, illetve próbáltam őket létre is hozni több-kevesebb sikerrel, a következő feladat ez lesz. Illetve a 3 layout vezérlőt nézem át tüzetesebben.

HTTP kérés C#-ban

Most meg szeretném mutatni, hogy hogyan lehet lementeni egy weboldal forráskódját, hogy abból fel tudjam dolgozni szükséges adatokat. A megállók neveivel és koordinátáival szerencsém volt, mert megtaláltam egy oldal forráskódjában az összes nevet és koordinátát (buszok, villamosok, trolik). Ez után csak fel kellett dolgoznom ezeket, amiről az előzőbejegyzésem szólt. De sajnos az indulási idők lekérése nem ilyen egyszerű.

Van egy weboldal, ami magába foglalja a összes menetrendet. Itt, ha kiválasztjuk a járatot, akkor az URL cím változik, azaz ha a 10-es választom ki akkor ezt látom: “http://…/10/…”. Erről a weboldalról le tudnám szedni HTTP kéréssel az összes járatnak az menetrendjét, csak ennek forráskódjában nincsenek benne a menetrendadatok. Continue reading

Silverlight Vezérlők a gyakorlatban

Silverlight Vezérlők a gyakorlatban

Mielőtt ezzel jobban megismerkedhetnénk, fel kell telepíteni a Silverlight Toolkit-et. Ezt nagyon egyszerűen letölthetjük a silverlight oldaláról, majd a referenciához hozzá kell adni a System.Windows.Controls.Toolkit.dll-t. Névtérnél is hozzá kell adni: xmlns:toolkit=”clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Toolkit” sor beírásával.

ContentControl:

Osztályból származó vezérlők a Content tulajdonságukon keresztül jelenítik meg a tartalmat. Object tipusú. A ContentControl érdekes vonása,hogy önmagában is használható. Összetett objektumokat is képes fogadni.

Button:

A legismertebb ContentControl vezérlők a különböző nyomógombvariánsok. A ButtonBase osztályból származnak.

RepeatButton:

Lényegében nem különbözik a hagyományos gombtól, egy fontosabb tulajdonság kivételével. Nyomva tartásával folyamatosan küldi a Click eseményeket.

HyperlinkButton:

Nevéhez híven átjárót biztosít egy külső weboldalra vagy valamilyen tartalomra.

CheckBox és RadioButton:

Ez a két vezérlő a ToggleButton osztályból származnak. Háromféle állapota lehet: jelölt (checked), nem jelölt (unchecked) és határozatlan (undetermined). A harmadik állapot akkor létezik, ha az adott vezérlőn az IsThreeState tulajdonságot igazra állítjuk. Az alapállapot minden esetben unchecked lesz.

Label:

Funkciója hasonlít a TextBlock-ra, annál jelentősen több lehetőséget biztosít. Valódi vezérlő. Segítségével informatív űrlapokat hozhatunk létre, amivel az adatok érvényességét is képes jelezni. Ez a vezérlő az SDK részét képezi. A SilverlightTools telepítésekor automatikusan hozzáadódik. A label erősen épít az adatkötésre.

ToolTip:

Segítségével információt köthetünk egy-egy vezérlőelemhez. Önmagában is használható, ekkor úgy viselkedik, mint egy label. A leggyakrabban egy másik vezérlőhöz kötjük hozzá, a ToolTipService osztály tulajdonságaival. A ToolTipService objektum Placement tulajdonsága jelöli, hogy a ToolTip a vezérlőhöz képest milyen pozícióban jelenjen meg.

ItemsControl:

Az ItemsControl osztályból származó vezérlők, lehetővé teszik egyszerre több elem megjelenítését. Hasonlóan a ContentConrol-hoz ez is használható önmagában. Ez az elemek kiválasztásának a rovására megy, ugyanis onnantól kezdve ez a lehetőség megszűnik. Az ItemsControls leszármazottak az ItemsSource tulajdonságon keresztül kapják meg a megjelenítendő listára hivatkozó referenciát. Összetett objektumok is lehetnek a lista elemei, ekkor meg kell adnunk, hogy mit akarunk megjeleníteni. Ha nem adunk meg neki semmit, akkor az osztály neve jelenik meg.

ListBox:

A ListBox az ItemsControl-ból eredő Selector osztályból származik. Lehetővé teszi, hogy elemeket válasszunk ki a megjelenített listából. A ListBox minden elemének egy-egy ListBoxItem objektum feleltethető meg, amely a ContentControl osztályból származik. Az elemek kiválasztásának módját a SelectionMode tulajdonsággal állíthatjuk be. Alapértelmezett módon csak egy elemet választhatunk ki. A Multiple és Extended értékek megengedik több elem kiválasztását is. A SelectChanged eseménnyel kezelhetjük a kiválasztott elemek listáját, ennek az eseménynek az eseménykezelője SelectionChangedEventArgs típusú paramétert kap. AddedItems illetve RemovedItems tulajdonságai tömbben tárolják az aktuálisan vagy az előzőleg kiválasztott elemeket.

ComboBox:

A ComboBox vezérlő valójában két részből áll. Egy TextBox-ból és egy lenyíló ListBox-ból. Egy elemet tudunk kiválasztani. Az elemeket a ComboBoxItem jelenítni meg. A ComboBox eseményei és tulajdonságai megegyeznek a ListBox jellemzőivel.

TreeView:

Ez a vezérlő fa-struktúrában képes megjeleníteni az elemeket. Minden eleme TreeViewItem típusú, amely maga is ItemsControl leszármazott, vagyis tartalmazhat több elemet, beleértve további TreeViewItem objektumokat is. A TreeViewItem osztály a HeaderedItemsControl osztályból származik, ezért a tartalmazott listán kívül egy fejléccel (Header) is rendelkezik. A TreeView működése hasonló a ListBox-éhoz, a SelectedItemChanged esemény mutatja a kiválasztott elem változását, amelyet a SelectedItem tulajdonság segítségével kérhetünk le.

TabControl:

A TabControl vezérlő segítségével az alkalmazás ugyanazon területét oszthatjuk szét több elem között. Ez a vezérlő is saját típust használ gyermekei leírására (TabItem), amely a HeaderedItemsControl osztályból származik, és a Header tulajdonság értéke jelenik meg az egyes lapok tetején.  A TabControl kiválóan alkalmas a Silverlightban nem támogatott MDI (Multiple Document Interface) megjelenítési. A TabControl eseményeinek és tulajdonságainak használata megegyezik a többi ItemsControl leszármazottéval.

 

 

 

Második feladatok – 1. rész

Mostani feladataim a következők:

  • win8 könyv átnézése
  • alkalmazás életciklusa és ennek debuggolása
  • windows 8 telepítése a laborban, majd Visual Studio 2012 telepítése
  • mvvm mintapélda készítése
  • animációk készítése: egy villogó gomb, gomb lenyomásra induljon el egy animáció (mozgás), összetettebb animáció
  • képek kezelésével kapcsolatban: le kell tölteni legalább 2db képet. Feladat: jelenjen meg az alkalmazásban (Hogy adod hozzá a projecthez?, milyen control-hoz köttöd és hogyan? Milyen megjelenítési módok vannak?).
  • Layout vezérlők közül pedig az alábbiakat kell tüzetesebben megnézni: FlipView, ListView, Virtualization.

 

A mai nap folyamán telepítettem a windows 8-at, illetve a Visual Studio-t. Ezen kívül megismerkedtem a windows 8 kinézetével, stb. Illetve az mvvm mintapéldához kerestem anyagokat, amivel még később jelentkezem.