concatenar - ¿Cómo usar StringFormat en elementos XAML?
xamarin forms xaml converter (4)
En general, puede buscar una propiedad de dependencia *StringFormat
asociada. Por ejemplo, todas las implementaciones de ContentControl (como Label y Tooltip) tienen la propiedad de dependencia ContentStringFormat :
<Label
Content="{Binding Path=DateAsked}"
ContentStringFormat="{}{0:yyyy/MM/dd HH:mm:ss}" />
En su caso, mientras que GridViewColumn tiene la propiedad de dependencia HeaderStringFormat para ir junto con Header
, no hay ningún análogo para DisplayMemberBinding
por lo que necesitará .NET 3.5 SP1 (consígalo con Visual Studio 2008 SP1 ) o mejor para usar el nuevo BindingBase .StringFormat Propiedad :
<GridViewColumn
Header="Order ID"
DisplayMemberBinding="{Binding Path=OrderID, StringFormat=''{}{0:dd.MM.yyyy}''}"
/>
Hay muchos más ejemplos en la entrada del blog Probar Binding.StringFormat .
Estoy metido en una pila de elementos XAML vinculante para las órdenes.
La fecha del pedido se muestra como, por ejemplo, "31/12/2008 12:00:00 AM".
Quiero que se muestre como, por ejemplo, "31.12.2008".
¿Cómo puedo hacer esto? He visto otras preguntas de stackoverflow mencionar StringFormat, pero utilizan multibinding de forma que no puedo ponerme a trabajar.
Este es el tipo de sintaxis que me gustaría (esto es 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>
No lo he probado, pero creo que esto debería funcionar:
<GridViewColumn
Header="Order Date"
DisplayMemberBinding=
"{Binding Path=OrderDate, StringFormat=''{}{0:dd.MM.yyyy}''}"/>
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 de resx:
<data name="DateFormat" xml:space="preserve">
<value>{0:dddd d MMMM H:mm}</value>
</data>
En su página de contenido, a continuación, incluya la ubicación del archivo resx
xmlns:il8n="clr-namespace:MyProject.Localization;assembly=MyProject"
Y luego puedes usarlo en tu encuadernación así:
<Label
Text = "{Binding Time, StringFormat={il8n:Translate DateFormat}}"
XAML
<UserControl.Resources>
<myNamespace:DateTimeConverter x:Key="DateTimeConverter" />
</UserControl.Resources>
<GridViewColumn
DisplayMemberBinding=="{Binding Path=OrderDate, Converter={StaticResource DateTimeConverter}}"
/>
DO#
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());
}
}