我深入了解绑定到订单的XAML元素堆栈。
订单日期显示为例如“12/31/2008 12:00:00 AM。”
我希望它显示为例如“31.12.2008”。
我该怎么做?我看到other stackoverflow questions提到了StringFormat,但他们使用的是多绑定方式,我无法工作。
这是我想要的语法(这是伪代码),只需在需要的地方指定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>
答案 0 :(得分:77)
我没有测试过,但我认为这应该有效:
<GridViewColumn
Header="Order Date"
DisplayMemberBinding=
"{Binding Path=OrderDate, StringFormat='{}{0:dd.MM.yyyy}'}"/>
答案 1 :(得分:28)
通常,您可以查找关联的*StringFormat
依赖项属性。例如,所有ContentControl实现(例如Label和Tooltip)都有ContentStringFormat dependency property:
<Label
Content="{Binding Path=DateAsked}"
ContentStringFormat="{}{0:yyyy/MM/dd HH:mm:ss}" />
在您的情况下,虽然GridViewColumn的HeaderStringFormat dependency property与Header
一致,但DisplayMemberBinding
没有模拟,因此您需要.NET 3.5 SP1(使用Visual Studio 2008 SP1)或更高版本来使用新的BindingBase.StringFormat Property:
<GridViewColumn
Header="Order ID"
DisplayMemberBinding="{Binding Path=OrderID, StringFormat='{}{0:dd.MM.yyyy}'}"
/>
博客文章Trying out Binding.StringFormat中有更多示例。
答案 2 :(得分: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());
}
}
答案 3 :(得分:0)
如果要本地化日期格式,可以将其包含在.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}}"