如何在XAML元素中使用StringFormat?

我深入XAML堆栈的元素绑定到订单。

订单date显示为例如“12/31/2008 12:00:00 AM”。

我希望它显示为例如“31.12.2008”。

我怎样才能做到这一点? 我已经看到其他的stackoverflow问题提到StringFormat,但他们使用multibinding的方式,我无法去工作。

这里是我想要的语法(这是伪代码),只需指定StringFormat,你需要它,这是可能的?

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

我没有testing过,但我认为这应该工作:

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

通常,您可以查找关联的*StringFormat依赖项属性。 例如,所有ContentControl实现(如Label和Tooltip)都具有ContentStringFormat依赖项属性 :

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

在你的情况下,虽然GridViewColumn具有HeaderStringFormat依赖属性和Header一起使用,但是DisplayMemberBinding没有类似的东西,所以你需要.NET 3.5 SP1(使用Visual Studio 2008 SP1 )或者更好地使用新的BindingBase .StringFormat属性 :

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

在博客文章中有更多的例子尝试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()); } } 

如果您想本地化date格式,可以将其包含在.resx文件中。 您必须按照以下指南设置您的应用以进行本地化: https : //developer.xamarin.com/guides/xamarin-forms/advanced/localization/ 。

resx条目:

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

在您的内容页面中,然后包含resx文件的位置

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

然后你可以在你的绑定中使用它:

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