In Windows Presentation Foundation l'utilizzo del Binding è certamente una delle attività più frequenti e può capitare che la normale conversione dei dati offerta del motore non basti, ma necessiti di una trasformazione particolare. Il caso più tipico è la visualizzazione di un numero o di una data sotto forma di testo . Lo script vuole proporre una classe converter standard da utilizzare in più progetti per soddisfare la maggior parte delle esigenza di formattazione. L'idea è quella di utilizzare il metodo String.Format che permette di trasformare in stringa qualsiasi oggetto che implementi l'interfaccia System.IFormattable, passando facoltativamente la formattazione da utilizzare. Per esempio, il seguente codice restituisce l'ora attuale come stringa "Data: 16/11/1981 07:00" utilizzando la formattazione "d":
string s = String.Format("Data: {0:d}", DateTime.Now);Si costruisce quindi una classe StringFormatConverter che implementa l'interfaccia IValueConverter (System.Windows.Data) e utilizzi il ConverterParameter dell'oggetto di Binding per ricevere la formattazione:
[ValueConversion(typeof(object), typeof(string))]
public class StringFormatConverter : IValueConverter
{
public object Convert(object value,
Type targetType,
object parameter,
System.Globalization.CultureInfo culture)
{
// Se abbiamo ricevuto la formattazione la usiamo
// altrimenti usiamo il ToString
string formatString = parameter as string;
if (formatString != null)
return string.Format(culture, formatString, value);
else
return value.ToString();
}
public object ConvertBack(object value,
Type targetType,
object parameter,
System.Globalization.CultureInfo culture) {
// Non effettuiamo nessuna conversione inversa
return null;
}
}Non resta far altro che sfruttare la classe come libreria esterna o direttamente all'interno dell'applicazione. Per poter utilizzare il converter, inoltre, occorre istanziarlo all'interno delle risorse per sfruttare la medesima istanza più volte per la conversione. Di seguito un esempio di utilizzo del StringFormatConverter per formattare in percentuale un numero:
<Window
xmlns:u="clr-namespace:WinFXItalia.Scripts.Converters">
<Window.Resources>
<u:StringFormatConverter x:Key="stringFormatConverter" />
</Window.Resources>
<TextBlock
Text="{Binding Path=PercentComplete,Converter={StaticResource stringFormatConverter},ConverterParameter='Stato: \{0\}%'}" />
</Window>Si noti dapprima l'utilizzo degli apici cosicché il parser tenga in considerazione degli spazi e in secondo luogo l'uso della \ per non confondere le graffe di formattazione con quelle delle MarkupExtension.
Esprimi il tuo giudizio su questo script:
Per procedere devi essere autenticato.
Per inserire un commento, devi registrarti alla nostra community.







Stampa
Download 


