Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 11 di 59
  • livello principiante
Indice lezioni

Type Converter

Comprendere e gestire la conversione tra markup e tipi di dati
Comprendere e gestire la conversione tra markup e tipi di dati
Link copiato negli appunti

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

<Rectangle x:Name="sampleRectangle" 
                     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"  >
  <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.

Ti consigliamo anche