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>
È stato utile?

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&#x3a;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}}"
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top