2009-03-26 24 views
49

Estoy en lo más profundo de una pila XAML de elementos vinculantes para las órdenes.¿Cómo usar StringFormat en elementos XAML?

La fecha del pedido se muestra como p. "31/12/2008 12:00:00 AM".

Quiero que se muestre como p. "31.12.2008".

¿Cómo puedo hacer esto? He visto other stackoverflow questions mencionar StringFormat pero usan multibinding de forma que no puedo ponerme a trabajar.

Aquí está el tipo de sintaxis que me gustaría (esto es un pseudocódigo), simplemente especificando StringFormat donde lo necesita, ¿es esto posible de alguna manera?

<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> 

Respuesta

72

Yo no lo he probado, pero creo que esto debería funcionar:

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

sí, ¡gracias, bingo! –

+3

Y puede agregar texto a cada lado de la cadena, por ejemplo, "Fecha de inicio: {0: dd-MM-aaaa}" –

+0

Tuve que quitar las comillas simples del valor de StringFormat. – Grault

3

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

Es mucho menos trabajo utilizar el método StringFormat. –

+0

Desde horas de búsqueda de cómo obtengo el 'ConverterCulture = {x: Static sysglb: CultureInfo.CurrentUICulture}}" 'de otras respuestas ejecutándose, terminé con su solución. – Nasenbaer

28

En general, se puede ver para un accesorio de dependencia *StringFormat asociado erty. Por ejemplo, todos los ContentControl implementaciones (tales como etiquetas y sobre herramientas) tienen la ContentStringFormat dependency property:

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

En su caso, mientras que el GridViewColumn tiene la HeaderStringFormat dependency property para ir junto con Header, no hay analógico para la DisplayMemberBinding y que por lo necesitará .NET 3.5 SP1 (conseguirlo con Visual Studio 2008 SP1) o mejor utilizar el nuevo BindingBase.StringFormat Property:

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

Hay muchos más ejemplos en el blog Trying out Binding.StringFormat.

+1

Me gusta este.Ni siquiera sabía acerca de ContentStringFormat. Me da algunas ideas – TravisWhidden

+0

Lo mismo que TravisWhidden – Paul

0

Si desea localizar el formato de fecha, puede incluirlo en su archivo .resx. Deberá configurar su aplicación para la localización siguiendo esta guía: https://developer.xamarin.com/guides/xamarin-forms/advanced/localization/.

La entrada resx:

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

En su página de contenido, a continuación, incluir la ubicación de la resx

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

Y entonces usted puede usarlo en su unión, así:

<Label 
    Text = "{Binding Time, StringFormat={il8n:Translate DateFormat}}" 
Cuestiones relacionadas