我有一个应用程序可以正确提取资源本地化。但是,日期时间的数据绑定始终使用 en-US 格式显示。
我在启动期间检查了 App 类,并且 CurrentCulture 和 CurrentUICulture 都设置为预期的文化。
据我所知,我没有应用日期格式。
我应该如何获取当前文化格式的日期?
我有一个应用程序可以正确提取资源本地化。但是,日期时间的数据绑定始终使用 en-US 格式显示。
我在启动期间检查了 App 类,并且 CurrentCulture 和 CurrentUICulture 都设置为预期的文化。
据我所知,我没有应用日期格式。
我应该如何获取当前文化格式的日期?
您必须将属性的数据类型更改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");
与其将 DateTime 传递给视图并依靠绑定将其转换为正确的格式,不如创建一个附加属性来包装现有属性,但应用适当的转换/格式。
例如
public class MyViewModel
{
public DateTime StartDate { get; set; }
public string LocalizedStartDate
{
get
{
return this.StartDate.ToString(CultureInfo.CurrentUICulture);
}
}
}
然后绑定:
<TextBlock Text="{Binding LocalizedStartDate}" .... />
原来有一个非常简单的解决方案。
通过添加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}}"
结果:日期以正确的文化呈现。