具有CultureInfo DateTime的DisplayFormat

时间:2012-07-19 13:59:58

标签: c# localization data-annotations

我正在尝试将公共属性的DisplayFormat设置为当前的cultureinfo日期时间格式。该类将用于Silverlight Datagrid。

    [DisplayFormat(DataFormatString=CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern.ToString())]
    public DateTime createDate { get; set; }

它说,只有参数只能是常数和typeof参数......

有什么想法吗?

更新,我尝试了Lukazoid解决方案,但Silverlight数据网格忽略了数据注释。由于本地化,数据网格列在代码隐藏中添加。

该列如下所示:

        DataGridTextColumn tcCreateDate = new DataGridTextColumn();
        tcCreateDate.Header = SilverlightApplication.Resources.ContentGrid.dgCreateDate;
        tcCreateDate.Binding = new Binding("createDate");

2 个答案:

答案 0 :(得分:5)

属性值必须是常量或typeof语法的结果。

如果要对当前区域性使用短日期格式,请使用以下格式字符串:

[DisplayFormat(DataFormatString = "{0:d}")]

<强>更新

我可以看到您添加DataGridTextColumn的更新代码,请尝试添加StringFormat

DataGridTextColumn tcCreateDate = new DataGridTextColumn();
tcCreateDate.Header = SilverlightApplication.Resources.ContentGrid.dgCreateDate;
tcCreateDate.Binding = new Binding("createDate") { StringFormat = "{0:d}" };

默认情况下,silverlight使用en-US作为所有绑定的当前区域性(无论您的系统设置如何),这意味着StringFormat将导致日期的美国格式。请参阅here以获取解决方案,以确保考虑当前设置。

答案 1 :(得分:1)

像这样试过

public class Foo
{
    [DataType(DataType.DateTime)]
    public DateTime createDate { get; set; }
}

这将显示项目的日期基础文化