Come utilizzare StringFormat negli elementi XAML?
-
22-08-2019 - |
Domanda
Sono in profondità in una pila XAML di elementi vincolanti per gli ordini.
dall'ordine visualizzata come ad esempio "2008/12/31 00:00:00".
voglio che venga visualizzato come ad esempio "31.12.2008".
Come posso fare questo? Ho visto altre domande StackOverflow parlare StringFormat ma usano MultiBinding in modi che non riesco a mettersi al lavoro.
Ecco il tipo di sintassi vorrei (questo è pseudocodice), semplicemente specificando StringFormat dove serve, questo è possibile in qualche modo?
<StackPanel>
<ListView ItemsSource="{Binding Orders}">
<ListView.View>
<GridView>
<GridViewColumn
Header="Order ID"
DisplayMemberBinding="{Binding Path=OrderID}"
StringFormat="{}{1:dd.MM.yyyy}"/>
<GridViewColumn
Header="Order Date"
DisplayMemberBinding="{Binding Path=OrderDate}"/>
</GridView>
</ListView.View>
</ListView>
</StackPanel>
Soluzione
Non ho ancora testato, ma credo che questo dovrebbe funzionare:
<GridViewColumn
Header="Order Date"
DisplayMemberBinding=
"{Binding Path=OrderDate, StringFormat='{}{0:dd.MM.yyyy}'}"/>
Altri suggerimenti
In generale, si può cercare una proprietà di dipendenza *StringFormat
associato. Per esempio, tutti ContentControl implementazioni (ad esempio etichetta e Tooltip) hanno il ContentStringFormat dipendenza proprietà :
<Label
Content="{Binding Path=DateAsked}"
ContentStringFormat="{}{0:yyyy/MM/dd HH:mm:ss}" />
Nel tuo caso, mentre il GridViewColumn ha il HeaderStringFormat dipendenza proprietà per andare avanti con Header
, non v'è alcuna analogico per il DisplayMemberBinding
e quindi sarà necessario .NET 3.5 SP1 (ottenere con Visual Studio 2008 SP1 ) o meglio utilizzare il nuovo BindingBase.StringFormat proprietà :
<GridViewColumn
Header="Order ID"
DisplayMemberBinding="{Binding Path=OrderID, StringFormat='{}{0:dd.MM.yyyy}'}"
/>
Ci sono molti altri esempi in post del blog Provare Binding.StringFormat .
XAML
<UserControl.Resources>
<myNamespace:DateTimeConverter x:Key="DateTimeConverter" />
</UserControl.Resources>
<GridViewColumn
DisplayMemberBinding=="{Binding Path=OrderDate, Converter={StaticResource DateTimeConverter}}"
/>
C #
public class DateTimeConverter : IValueConverter
{
public object Convert(object value,
Type targetType,
object parameter,
CultureInfo culture)
{
if (value != null)
{
return ((DateTime)value).ToString("dd.MM.yyyy");
}
else
{
return String.Empty;
}
}
public object ConvertBack(object value,
Type targetType,
object parameter,
CultureInfo culture)
{
return DateTime.Parse(value.ToString());
}
}
Se si voleva localizzare il formato della data, è possibile includere nel file .resx. Si dovrà impostare la vostra applicazione per la localizzazione seguendo questa guida: https: //developer.xamarin.com/guides/xamarin-forms/advanced/localization/.
La voce resx:
<data name="DateFormat" xml:space="preserve">
<value>{0:dddd d MMMM H:mm}</value>
</data>
Nella tua pagina di contenuto, è quindi includere il percorso del file resx
xmlns:il8n="clr-namespace:MyProject.Localization;assembly=MyProject"
E allora si può utilizzare nel vostro legame in questo modo:
<Label
Text = "{Binding Time, StringFormat={il8n:Translate DateFormat}}"