C# WPF Aplikace - Converter1

Když modelařím, občas potřebuji konvertovat jednotky z například kubických palců na kubické centimetry. Spalovací motory jsou tak běžně označovány. Například motory do buggy mají označení .21" a to je 3,5ccm. Například na tomto odkazu jsem zveřejnil překlad návodu k motoru "Ofna Picco P2 26 mx", kde číslo 26 je označení objemu v kubických palcích (0.26"). Motor má tedy objem 4.2ccm

Pro účely konverze používám už dlouhou dobu prográmek Convert.exe od Joshe Madisona, který umí konvertovat snad vše na vše.

V rámci samostudia WPF a C# 4.0 jsem narazil na zajímavé téma a to je mapování datových zdrojů. Jenou takovou možností je XML. Napadlo mě, že ve WPF bych takovou úlohu mohl zkusit napsat tak, abych programoval co nejmíň kódu v C#. Dal jsem si tedy za úkol zkusit takovýto konvertovací prográmek napsat. Spíš jeho prototyp. A ozkoušet tak možnosti WPF.

Pro čtení dat z XML lze použít WPF objekt XmlDataProvider, který umí data přijmout z externího zdroje jako je URL na web třeba na něké PHP, které XML generuje, nebo soubor z lokálního disku, nebo síťového zdroje a nebo také lokálně jako vnořené přímo do WPF pomocí tagu x:XData.

XML strukturu jsem navrhnul tak, aby pod root elementem byl seznam názvů skupin veličin, které jsou v aplikaci viditelné jako záložky, dále každá skupina má opět svojí množinu dílčích veličin. Ty se zobrazují v listboxech. No a každá veličina má další elementy definující název a koeficient poměru vůči ostatním veličinám.

Samotný konvertovací výpočet je na jeden řádek, kde dělíme vstup výstupem a násobíme konvertovanou hodnotou. Tak se získá výsledná hodnota převedená do zvolených jednotek.

Zadání pro WPF tedy je. Vytvořit datový zdroj z XML, které je součástí (pro zjednodušení) WPF. Vytvořit dynamicky záložky podle skupin veličin, na záložkách vytvořit listboxy, které se naplní daty z vnořených elementů.

XML vypadá takto:

              
<ConversionReceipt xmlns="">
	<Kinds>
		<Kind>
			<Name2>Volume</Name2>
			<Unit>
				<Name2>Cubic centimeter</Name2>
				<Ratio>1.0</Ratio>
			</Unit>
			<Unit>
				<Name2>Galon</Name2>
				<Ratio>0.0002641720524</Ratio>
			</Unit>
		</Kind>
	</Kinds>
</ConversionReceipt>
Po aplikování XML by měl formulář obsahovat jednu záložku s názvem Volume, na záložce 2x listbox s obsahem:
  • Cubic Centimenet
  • Galon

Tím jsem si zajistil další materiál pro učení, protože abych tohoto dosáhl, musím se naučit používat ItemTemplate a DataTemplate. Dál, aby aplikace fungovala, přidám dva TextBoxy, jeden pro sběr vstupu od uživatele a druhý pro zobrazení výstupu. Po zadání hodnoty se výstup hned přepočítá, stejně tak při změnách v listboxech.

Abych docílil přepočtu, aniž bych moc programoval naučil jsem se konvertory. V tomto případě jsem použil MultiValueConverter, který bude mít celkem 3 vstupy:

  • koeficient vstupní jednotky
  • koeficient výstupní jednotky
  • hodnotu ve vstupní jednotce

Konvertor má za úkol vypočítat výstupní hodnotu. Jeho mapování ve WPF je velice elegantní. Chvíli mi tvalo než jsem to celé dal dokupy. Rozhodně to ale splnilo svůj účel. Pochopil jsem jak to pracuje a jak to používat.

Konvertor byl taky jediný kus kódu, který jsem programoval. Vše ostatní dělá WPF za mě.

Závěrem bych chtěl projevit radost nad povedeností WPF technologie. Když jsem se do toho před cca rokem podíval poprvé, netušil jsem co od toho čekat, netušil sem, že mě práce pod WPF chytne natolik, že v tom budu chtít programovat víc a víc. Kdo ví, kam mě to ještě zavane.

Zdrojévé kódy si můžete stáhnout na tomto odkazu.

Aplikaci jsem ale ještě maličko rozvinul, jelikož jsem si chtěl v praxi ověřit pár dalších nově nabitých vědomostí a tak tento článek má pokračování.


FUVI0111ADANAUL
FREE Joomla! template "Adana"
joomla 1.6 templates by funky-visions.de