如何在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:mm}</value> </data>
在您的内容页面中,然后包含resx文件的位置
xmlns:il8n="clr-namespace:MyProject.Localization;assembly=MyProject"
然后你可以在你的绑定中使用它:
<Label Text = "{Binding Time, StringFormat={il8n:Translate DateFormat}}"