Archive for April, 2009

Oggi vorrei presentare un argomento utile per sveltire qualche procedura di elaborazione dati da XML. L’idea da cui sono partito è questa: come faccio a leggere i dati da XML e mostrarli su un’interfaccia, senza scrivere mezza riga di C#? Con il Binding dei dati.

In poche parole il Binding dei dati è un modo per creare un link simbolico tra un elemento ed un altro, ad esempio un elemento visuale come un “textbox” e il suo contenuto.

Ammettiamo di avere un documento XML che contiene i dati anagrafici di una persona e io volessi riempire un form del mio programma, dovrei leggere i tag del file XML e compilare il form; se questo file XML contiene 1000 persone lo faccio manualmente?

Ho risolto il problema in questo modo:

  • ogni persona dell’XML sarà un form diverso, quindi dovrò avere una lista di form.
  • per ogni persona dovrò compilare una serie di campi, e devo inserire le informazioni in un campo di testo
  • per inserire l’informazione giusta nel campo giusto farò il binding dei dati, che è un riferimento simbolico esplicito

Quello che faremo noi, per semplicità è caricare delle immagini utilizzando tale metodo. Visto che ci stavo lavorando proprio il giorno del mio compleanno… beh mi sono fatto gli auguri J.

Costruiamo quindi un semplice file XML che metteremo nella nostra applicazione:

<?xml version=”1.0″ encoding=”utf-8″ ?>

<birthday>

<letter pic=”images/a.png”/>

<letter pic=”images/u.png”/>

<letter pic=”images/g.png”/>

<letter pic=”images/u2.png”/>

<letter pic=”images/r.png”/>

<letter pic=”images/i.png”/>

</birthday>

I tag sono completamente inventati, possiamo usare quelli che meglio ci aggradano.

Vediamo quindi il codice XAML per recuperarci queste informazioni:

XMLDataProvider è un oggetto che fornisce i dati dal file XML e il percorso che ci interessa è “letter”, un tag incluso in birtday; per accedere a “letter” dovremo dunque specificare l’intero percorso, nel nostro caso “birthday/letter” e lo assegnamo alla variabile XPath. La parte realmente interessante è il binding di ogni immagine con ogni elemento della ListBox, cioè una lista di elementi.

Il codice che segue è schematizzabile in questo modo:

  • indico che il Source di ogni elemento (Item) è dato da un link simbolico, dato da un binding dei dati
  • Per rendere più carina l’applicazione creo uno stile che per ogni elemento, che consiste semplicemente di una grandezza e di un contenitore dove mettere l’immagine
  • Indico un template per ogni elemento, e indico che questo template deve essere l’immagine caricata dall’XML.

Si può notare che nel file XML c’è il tag letter con la variabile “pic”, che qui utilizzo con Source=”{Binding XPath=@pic}”, dove “pic” è inventato da me ed è l’abbreviazione comune in inglese per indicare pictures, cioè un’immagine.

Ed ecco quindi il risultato, senza aver scritto mezza riga di C#, né un parser, né un loader custom di elaborazione immagini!

Oggi volevo fare qualcosa di creativo. Una delle applicazioni che avrei voluto fare da tempo era un mio lettore multimediale, che leggesse video e musica da locale. In effetti, da quando mi sono avvicinato alla tecnologia WPF, sto scoprendo davvero tante risorse che stimolano il mio lato creativo :P .
Beh ci avrei potuto lavorare un po’ di più, ma dati i tempi ristretti che ho per dedicarmi alle mie applicazioni senza scopi veri, gli ho dedicato solo una sera.
Tutto sommato non è affatto male, in 6 ore di lavoro. Ecco il nuovo lettore mp3-mp4 e wmv by Code Zero Team :)

Beh spero che vi piaccia. A breve anche i codici sorgenti, al momento ha alcuni bug, e non supporta il drag & drop, cosa molto brutta. Ma ci lavorerò con calma :)

Quello di cui voglio parlare oggi è come far interagire due linguaggi nel .NET Framework: XAML e C#. XAML è un linguaggio dichiarativo, mentre C# Object-Oriented di tipo general purpose, cioè creato per molteplici fini.
Il 4 Aprile ho tenuto un seminario all’Università degli Studi di Cagliari, che è sfociato in un piccolo esame da 1 CFU. Beh diciamo che ciò che ho fatto è stato far coincidere Cool Stuff, con ripetitività e semplicità per mettere in condizione gli studenti di passare l’esame.
Il problema più grosso è stato dover programmare in tempo reale per mostrare le caratteristiche dei linguaggi, perchè la risoluzione del proiettore era 800 x 600, e io avevo a disposizione rimanente si e no 10-13 pollici di schermo per mostrare il codice a grandezza enorme, perchè anche nell’ultima fila si vedesse.
Se ci provate, non so se resistereste più di 10 minuti…è infattibile! e io avevo 70 persone con gli occhi puntati. E’ stato molto interessante e soprattutto molto costruttiva come esperienza, da quello che ho sentito, non solo per me ma anche per loro. Chiaramente metà dei consensi li ho persi solo perchè ho preparato un esame :) ed un altro po’ perchè non riusciva a programmare. Ma sono rischi che si corrono :)
Quello che voglio mostrare, è come si sarebbe dovuto risolvere uno dei testi proposti come esame.

Spero possa essere utile a tutti.

 

Link Video

Link Materiale

 

-davide