57 votes

Comment utiliser StringFormat dans des éléments XAML?

Je suis plongé dans une pile XAML d'éléments de liaison pour les commandes.

La date de la commande s'affiche comme par exemple "12/31/2008 12:00:00 AM".

Je veux qu'il affiche comme par exemple "31.12.2008".

Comment puis-je faire cela? J'ai vu d'autres stackoverflow questions mention StringFormat mais ils utilisent multibinding dans les moyens que je ne peux pas me rendre au travail.

Ici, c'est 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>

84voto

Razzie Points 14705

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}'}"/>
 

29voto

Olivier Dagenais Points 605

En général, vous pouvez trouver un associé *StringFormat de la propriété de dépendance. Par exemple, tous les ContentControl implémentations (comme l'Étiquette et l'info-bulle) ont la ContentStringFormat propriété de dépendance:

<Label
    Content="{Binding Path=DateAsked}"
    ContentStringFormat="{}{0:yyyy/MM/dd HH:mm:ss}" />

Dans votre cas, tandis que le GridViewColumn a la HeaderStringFormat propriété de dépendance pour aller avec Header, il n'y a pas d'analogue pour l' DisplayMemberBinding et donc vous aurez besoin .NET 3.5 SP1 (l'obtenir avec Visual Studio 2008 SP1) ou une meilleure utilisation de 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 d'Essayer de Liaison.StringFormat.

4voto

sipwiz Points 15291

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());
    }
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X