Como usar o StringFormat em elementos XAML?
-
22-08-2019 - |
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>
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: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}}"