WP7的日期没有国际化?

时间:2013-02-27 09:54:24

标签: c# windows-phone-7 datetime internationalization formatting

我有一个应用程序,可以正确地提取资源。但是,数据绑定日期时间始终使用en-US格式显示。

我在启动期间检查了App类,并将CurrentCulture和CurrentUICulture都设置为预期的文化。

据我所知,我没有应用日期格式。

我应该如何使用当前文化格式化日期?

3 个答案:

答案 0 :(得分:1)

您必须将属性StartDate的数据类型更改为字符串:

string _startDate;
public string StartDate
{
    get { return _startDate; }
    set
    {
        _startDate = value;
        OnPropertyChanged("StartDate");
    }
}

将值分配给StartDate时,请在方便时使用ToString()方法的以下重载之一:

StartDate = DateTime.Now.ToString();
StartDate = DateTime.Now.ToString("d");
StartDate = DateTime.Now.ToString("D");

答案 1 :(得分:1)

不是将DateTime传递给视图并依赖绑定将其转换为正确的格式,而是创建一个包装现有属性的附加属性,但应用适当的转换/格式。 e.g。

public class MyViewModel
{
    public DateTime StartDate { get; set; }

    public string LocalizedStartDate
    {
        get
        {
            return this.StartDate.ToString(CultureInfo.CurrentUICulture);
        }
    }
}

然后绑定:

<TextBlock Text="{Binding LocalizedStartDate}" .... />

答案 2 :(得分:1)

原来有一个非常简单的解决方案。

通过在绑定表达式中添加IValueConverter并使用转换器,但忽略culture参数,格式化工作完美。 对于每种不同的格式,您将需要一个转换器(如果您不接受参数)。

转换器(从示例中删除了属性):

public class DateConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        DateTime date = (DateTime)value;
        return date.ToShortDateString();
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        string strValue = value as string;
        DateTime resultDateTime;
        if (DateTime.TryParse(strValue, out resultDateTime))
        {
            return resultDateTime;
        }
        return DependencyProperty.UnsetValue;
    }
}

命名空间

xmlns:conv="clr-namespace:Sjofartsverket.LotsPDA20.Client.Converters"

资源

<conv:DateConverter x:Key="dateConverter" />

绑定表达式:

<TextBlock Text="{Binding StartDate, Converter={StaticResource dateConverter}}" 

结果: 日期以正确的文化呈现。