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.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
I più letti di oggi
- Effettuare il multi-checkout in linea nelle pipeline di Azure DevOps
- Sfruttare una CDN con i bundle di ASP.NET
- Alleggerire le applicazioni WPF sfruttando gli oggetti Freezable
- Le DirectInk API nella Universal Windows Platform
- Gli oggetti CallOut di Expression Blend 4.0
- Effetto turnstile su tutte le pagine con il Windows Phone Toolkit
- Esaminare documenti XML con namespace utilizzando LINQ to XML
- Inserire le news di Punto Informatico nel proprio sito


