Comment utiliser StringFormat dans XAML elements?
je suis profondément dans une pile D'éléments XAML liés aux ordres.
la date de commande s'affiche par exemple"12/31/2008 12:00:00 AM".
je veux qu'il affiche comme par exemple "31.12.2008".
Comment faire? J'ai vu autres questions sur les flux stacoverflow mentionner StringFormat, mais ils utilisent multibinding de manières que je ne peux pas obtenir pour travailler.
voici le genre de syntaxe je voudrais (c'est pseudocode), simplement en spécifiant 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>
4 réponses
Je ne l'ai pas testé, mais je pense que cela devrait marcher:
<GridViewColumn
Header="Order Date"
DisplayMemberBinding=
"{Binding Path=OrderDate, StringFormat='{}{0:dd.MM.yyyy}'}"/>
en général, vous pouvez chercher une propriété de dépendance associée à *StringFormat
. Par exemple, toutes les implémentations ContentControl (telles que Label et Tooltip) ont la propriété ContentStringFormat dependency property :
<Label
Content="{Binding Path=DateAsked}"
ContentStringFormat="{}{0:yyyy/MM/dd HH:mm:ss}" />
dans votre cas, alors que le GridViewColumn a la HeaderStringFormat propriété de dépendance pour aller avec Header
, il n'y a pas analogique pour le DisplayMemberBinding
et donc vous aurez besoin de .NET 3.5 SP1 (get it with Visual Studio 2008 SP1 ) ou mieux pour utiliser la nouvelle BindingBase.StringFormat Propriété :
<GridViewColumn
Header="Order ID"
DisplayMemberBinding="{Binding Path=OrderID, StringFormat='{}{0:dd.MM.yyyy}'}"
/>
il y a beaucoup plus d'exemples sur le blog essayer liaison.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 voulait localiser le format de la 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/ .
La resx entrée:
<data name="DateFormat" xml:space="preserve">
<value>{0:dddd d MMMM H:mm}</value>
</data>
dans votre page de contenu, vous incluez alors l'emplacement du fichier resx
xmlns:il8n="clr-namespace:MyProject.Localization;assembly=MyProject"
Et ensuite vous pouvez l'utiliser dans votre reliure comme ceci:
<Label
Text = "{Binding Time, StringFormat={il8n:Translate DateFormat}}"