2011-01-14 18 views
9

C'è un modo per formattare una data utilizzando XAML per Windows Phone 7?Formattazione di una data in XAML su WP7

Se ha provato:

<TextBlock Text="{Binding Date, StringFormat={}{0:MM/dd/yyyy}}" /> 

ma ho l'errore:

La proprietà 'StringFormat' non è stato trovato nel tipo 'vincolante'

risposta

20

All'interno SL4 questo è possibile ...

<TextBlock Text="{Binding Date, StringFormat='MM/dd/yyyy'}}"/> 

... all'interno SL3 si avrebbe bisogno di fare uso di un IValueConverter.

public class DateTimeToStringConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return String.Format("{0:MM/dd/yyyy}", (DateTime)value); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

Se si voleva un approccio più robusto si potrebbe fare uso della ConverterParameter.

public class DateTimeToStringConverter : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
       if (parameter == null) 
        return ((DateTime)value).ToString(culture); 
       else 
        return ((DateTime)value).ToString(parameter as string, culture); 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      throw new NotImplementedException(); 
     } 
    } 

Poi, nel tuo XAML si dovrebbe prima definire il convertitore come una risorsa ...

<namespace:DateTimeToStringConverter x:Key="MyDateTimeToStringConverter"/> 

..quindi riferimento a esso con un parametro accettabile per la formattazione del valore DateTime ...

<TextBlock Text="{Binding Date, 
     Converter={StaticResource MyDateTimeToStringConverter}, 
     ConverterParameter=\{0:M\}}"/> 
+0

+1 tuttavia alcuni suggerimenti: includere un esempio di utilizzo, fanno uso della ConverterParameter di passare in una stringa di formato alternativo, dare alla classe un nome più consono alla sua funzione di dire "DateTimeToStringConverter". – AnthonyWJones

+0

@AnthonyWJones Modifiche aggiunte ... –

+0

Consiglio vivamente di non utilizzare un IValueConverter. Una riga di codice C# durante l'esposizione della proprietà vincolante farebbe altrettanto bene questa conversione. – JustinAngel

2

Per quanto mi StringFromat conoscenza è la funzione Silverlight 4, Silverlight per Windows Phone 7.0 è fondamentalmente Silverlight 3 + alcuni extra. Immagino di no allora.

+1

opera da Mango –