Je suis au cœur d'une pile d'éléments XAML liant les commandes.
La date de la commande s’affiche, par exemple, "31/12/2008 00:00:00".
Je veux qu'il s'affiche comme par exemple "31.12.2008".
Comment puis-je faire ceci? J'ai vu d'autres questions de stackoverflow mentionne StringFormat, mais ils utilisent la liaison multiple d'une manière que je ne peux pas me rendre au travail.
Voici le type de syntaxe que je voudrais (il s’agit d’un pseudocode), en spécifiant simplement StringFormat où vous en avez besoin, est-ce possible?
<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>
Je ne l'ai pas testé, mais je pense que cela devrait fonctionner:
<GridViewColumn
Header="Order Date"
DisplayMemberBinding=
"{Binding Path=OrderDate, StringFormat='{}{0:dd.MM.yyyy}'}"/>
En général, vous pouvez rechercher une propriété de dépendance *StringFormat
associée. Par exemple, toutes les implémentations ContentControl (telles que Label et Tooltip) ont la propriété de dépendance ContentStringFormat :
<Label
Content="{Binding Path=DateAsked}"
ContentStringFormat="{}{0:yyyy/MM/dd HH:mm:ss}" />
Dans votre cas, alors que GridViewColumn a la propriété de dépendance HeaderStringFormat pour aller avec Header
, il n’existe pas d’analogue pour DisplayMemberBinding
et vous aurez donc besoin de .NET 3.5 SP1 (obtenez-le avec Visual Studio 2008 SP1 ) ou mieux, utilisez la nouvelle propriété BindingBase.StringFormat :
<GridViewColumn
Header="Order ID"
DisplayMemberBinding="{Binding Path=OrderID, StringFormat='{}{0:dd.MM.yyyy}'}"
/>
Il y a beaucoup d'autres exemples sur le blog Trying out 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());
}
}
Si vous souhaitez localiser le format de date, vous pouvez l'inclure dans votre fichier .resx. Vous devrez configurer votre application pour la localisation en suivant ce guide: https://developer.xamarin.com/guides/xamarin-forms/advanced/localization/ .
L'entrée resx:
<data name="DateFormat" xml:space="preserve">
<value>{0:dddd d MMMM H:mm}</value>
</data>
Dans votre page de contenu, vous incluez ensuite l'emplacement du fichier resx
xmlns:il8n="clr-namespace:MyProject.Localization;Assembly=MyProject"
Et puis vous pouvez l’utiliser dans votre reliure comme ceci:
<Label
Text = "{Binding Time, StringFormat={il8n:Translate DateFormat}}"