57

我深入了解与订单绑定的元素的 XAML 堆栈。

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

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

我怎样才能做到这一点?我已经看到其他 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>
4

4 回答 4

84

我没有测试过,但我认为这应该有效:

<GridViewColumn
    Header="Order Date"
    DisplayMemberBinding=
        "{Binding Path=OrderDate, StringFormat='{}{0:dd.MM.yyyy}'}"/>
于 2009-03-26T13:31:07.310 回答
29

通常,您可以查找关联的*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}'}"
/>

博客文章Trying out Binding.StringFormat中有更多示例。

于 2010-09-25T15:09:10.650 回答
4

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());
    }
}
于 2009-03-26T13:24:59.197 回答
0

如果要本地化日期格式,可以将其包含在 .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}}"
于 2017-07-25T09:04:16.993 回答