我有一个应用程序,可以正确地提取资源。但是,数据绑定日期时间始终使用en-US格式显示。
我在启动期间检查了App类,并将CurrentCulture和CurrentUICulture都设置为预期的文化。
据我所知,我没有应用日期格式。
我应该如何使用当前文化格式化日期?
答案 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}}"
结果: 日期以正确的文化呈现。