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\}}"/>
+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
@AnthonyWJones Modifiche aggiunte ... –
Consiglio vivamente di non utilizzare un IValueConverter. Una riga di codice C# durante l'esposizione della proprietà vincolante farebbe altrettanto bene questa conversione. – JustinAngel