4

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

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

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

我应该如何获取当前文化格式的日期?

4

3 回答 3

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");
于 2013-02-27T12:24:51.227 回答
1

与其将 DateTime 传递给视图并依靠绑定将其转换为正确的格式,不如创建一个附加属性来包装现有属性,但应用适当的转换/格式。
例如

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

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

然后绑定:

<TextBlock Text="{Binding LocalizedStartDate}" .... />
于 2013-02-27T12:27:45.227 回答
1

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

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

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

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}}" 

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

于 2013-02-27T14:21:51.827 回答