Pergunta

Estou profundamente em uma pilha XAML de elementos de ligação às ordens.

a data do pedido é exibido como por exemplo "12/31/2008 00:00:00".

eu quero que ele exibição como por exemplo "31.12.2008".

Como posso fazer isso? Eu vi outras perguntas stackoverflow mencionar StringFormat mas eles usam ligações múltiplas de maneiras que eu não posso começar a trabalhar.

Aqui é o tipo de sintaxe Eu gostaria (isto é pseudocódigo), simplesmente especificando StringFormat onde for necessário, isso é possível de alguma forma?

<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>
Foi útil?

Solução

Eu não testei isso, mas eu acho que isso deve funcionar:

<GridViewColumn
    Header="Order Date"
    DisplayMemberBinding=
        "{Binding Path=OrderDate, StringFormat='{}{0:dd.MM.yyyy}'}"/>

Outras dicas

Em geral, você pode olhar para uma propriedade *StringFormat dependência associada. Por exemplo, todos ContentControl implementações (tal como rótulo ea dica) têm a ContentStringFormat propriedade de dependência :

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

No seu caso, enquanto o GridViewColumn tem a HeaderStringFormat propriedade de dependência para ir junto com Header, não há analógico para o DisplayMemberBinding e assim você terá .NET 3.5 SP1 (obtê-lo com Visual Studio 2008 SP1 ) ou melhor usar o novo BindingBase.StringFormat propriedade :

<GridViewColumn 
    Header="Order ID"
    DisplayMemberBinding="{Binding Path=OrderID, StringFormat='{}{0:dd.MM.yyyy}'}"
/>

Existem muitos mais exemplos no post Tentando 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 você quisesse localizar o formato de data, você pode incluí-lo em seu arquivo .resx. Você terá que configurar seu aplicativo para localização, seguindo este guia: https: //developer.xamarin.com/guides/xamarin-forms/advanced/localization/ .

A entrada resx:

<data name="DateFormat" xml:space="preserve">
    <value>{0:dddd d MMMM H&#x3a;mm}</value>
</data>

Na sua página de conteúdo, você, em seguida, incluir a localização do arquivo resx

xmlns:il8n="clr-namespace:MyProject.Localization;assembly=MyProject"

E então você pode usá-lo em sua ligação assim:

<Label
    Text = "{Binding Time, StringFormat={il8n:Translate DateFormat}}"
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top