如何在 XAML 元素中使用 StringFormat?
-
22-08-2019 - |
题
我深入研究了绑定到订单的 XAML 元素堆栈。
订单日期显示为例如“2008 年 12 月 31 日上午 12:00:00”。
我希望它显示为例如“2008 年 12 月 31 日”。
我怎样才能做到这一点?我见过 其他 stackoverflow 问题 提到 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>
解决方案
我没有测试过,但我认为这应该工作:
<GridViewColumn
Header="Order Date"
DisplayMemberBinding=
"{Binding Path=OrderDate, StringFormat='{}{0:dd.MM.yyyy}'}"/>
其他提示
一般来说,您可以寻找相关的 *StringFormat
依赖属性。例如,所有 内容控制 实现(例如标签和工具提示)具有 ContentStringFormat 依赖属性:
<Label
Content="{Binding Path=DateAsked}"
ContentStringFormat="{}{0:yyyy/MM/dd HH:mm:ss}" />
就你而言,虽然 网格视图列 有 HeaderStringFormat 依赖属性 一起去 Header
, ,没有类似物 DisplayMemberBinding
所以你需要.NET 3.5 SP1(通过 视觉工作室 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());
}
}
如果你想本地化的日期格式,可以将其包含在你的.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}}"
不隶属于 StackOverflow