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
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>
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:
CanConvertFrom(ITypeDescriptorContext, Type)ConvertFrom(ITypeDescriptorContext, CultureInfo, Object)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.
LINQ e la trappola della 'deferred execution'Una "trappola" in cui si può incappare utilizzando il risultato di... |
C#, le Custom Type ConversionConversioni personalizzate tra classi, creare metodi particolari per... |
Introduzione a Entity FrameworkIl framework ORM messo a disposizione da .NET |
Repeater: visualizzare un feed RSSUtilizzare il controllo XMLDataSource e sfruttare il metodo XPath()... |
Repeater, il server control "semplice"Cos'è e come funziona il controllo Repeater |
Guida ASP.NET MVC Best PracticesUn workflow dettagliato e ricco di suggerimenti pratici per... |
Guida ASP.NET Starter KitUn modo semplice per imparare ad utilizzare le tecnologie Microsoft... |
Guida Visual Studio 2010L'ambiente di sviluppo di riferimento per sviluppare applicazioni su... |
Ogni giovedì, direttamente nella tua e-mail: articoli, guide, tutorial e script ASP, ASP.Net, SQL server e IIS.
Iscriviti alla newsletter
|
|
Corso Progettazione database11 Maggio 2012 a Milano |
|
|
Amministratore di Reti Windows Server 200811 Giugno 2012 a Milano |
|
Nessun corso previsto |