ASP.Net  »  Guide  »  Guida Silverlight 

Type Converter



Per introdurre il concetto espresso dai Type Converter prendiamo subito come esempio questo codice XAML:

<Rectangle x:Name="sampleRectangle" 
                   Height="50" Width="100" Fill="Blue" />

e l'equivalente codice procedurale scritto in C#:

private Rectangle CreateBlueRectangle()
{
    Rectangle rect = new Rectangle();
    rect.Name = "sampleRectangle";
    rect.Height = 50;
    rect.Width = 100;
    rect.Fill = new SolidColorBrush(Colors.Blue);
    return rect;
}

I due frammenti di codice hanno il medesimo risultato, che è quello di creare un elemento Rectangle di colore blu.

Figura 16. Rettagolo descritto dal codice

Rettagolo descritto dal codice

Confrontanto i due frammenti di codice ci si può chidere come il parser di XAML converta il valore letterale "50" in un tipo double, piuttosto che il valore "Blue" nell'oggetto System.Windows.Media.SolidColorBrush di colore blu. Il tutto funziona grazie ai Type Converter, che immagazzinano la logica necessaria a convertire una stringa in un determinato oggetto .NET.

Un Type Converter è una classe con un insieme di metodi suddivisi concettualmente in due gruppi, un primo gruppo che informa il parser se il Type Converter è in grado di convertire il valore ed un secondo gruppo che effettua le operazioni di conversione.

Questo meccanismo mantiene compatte le definizioni degli oggetti nel codice XAML, a beneficio della leggibilità, ma soprattutto della ridotta quantità di bytes da scaricare lato client. Senza di essi dovremmo utilizzare sempre i Property Element, con evidente appesantimento del codice:

<Rectangle x:Name="sampleRectangle" Height="50" Width="100">
  <Rectangle.Fill>
    <SolidColorBrush Color="Blue" />
  </Rectangle.Fill>
</Rectangle>

Custom Type Converter

Il framework di Silverlight 2 fornisce già un insieme di Type Converters utili nella maggior parte delle situazioni. Talvolta però, durante lo sviluppo di un'applicazione, possiamo avere il bisogno di implementare un Custom Type Converter per istanziare una nostra classe in XAML.

L'operazione non è complessa, basta creare una classe che erediti da System.ComponentModel.TypeConverter ed effettui l'override dei metodi interessati. I due fondamentali sono:

I nomi dei metodi sono abbastanza autoesplicativi. Il primo restituisce un tipo boolean, ed è quello che informa il parser se il Type Converter in grado di effettuare la conversione, mentre il secondo, che restituisce un tipo object, si occupa di trasformare il valore letterale nel rispettivo oggetto .NET.

Per finire basta applicare alla classe che andrà istanziata nello XAML l'attributo System.ComponentModel.TypeConverterAttribute, passandogli il typeof del Custom Type Converter creato, al resto penserà il parser.

Ultimi articoli ASP.Net

LINQ e la trappola della 'deferred execution'

Una "trappola" in cui si può incappare utilizzando il risultato di...

C#, le Custom Type Conversion

Conversioni personalizzate tra classi, creare metodi particolari per...

Introduzione a Entity Framework

Il framework ORM messo a disposizione da .NET

Repeater: visualizzare un feed RSS

Utilizzare il controllo XMLDataSource e sfruttare il metodo XPath()...

Repeater, il server control "semplice"

Cos'è e come funziona il controllo Repeater

Altri articoli

Guide ASP.Net

Guida ASP.NET MVC Best Practices

Un workflow dettagliato e ricco di suggerimenti pratici per...

Guida ASP.NET Starter Kit

Un modo semplice per imparare ad utilizzare le tecnologie Microsoft...

Guida Visual Studio 2010

L'ambiente di sviluppo di riferimento per sviluppare applicazioni su...

Altre guide

Newsletter @Microsoft Dev

Ogni giovedì, direttamente nella tua e-mail: articoli, guide, tutorial e script ASP, ASP.Net, SQL server e IIS.

Iscriviti alla newsletter

Altre newsletter

Corsi in aula

Corso Progettazione database

11 Maggio 2012 a Milano
Disponibilità: 6 Posti

Amministratore di Reti Windows Server 2008

11 Giugno 2012 a Milano
Disponibilità: 5 Posti

Nessun corso previsto