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>
50
demandé sur Community 2009-03-26 16:19:06

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}'}"/>
74
répondu Razzie 2011-12-30 22:41:26

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 .

28
répondu Olivier Dagenais 2010-09-25 15:09:10

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());
    }
}
3
répondu sipwiz 2009-03-26 13:24:59

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&#x3a;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}}"
0
répondu RobVoisey 2017-07-25 09:04:16