2012-07-19 62 views
3

我试图将公共属性的DisplayFormat设置为当前的cultureinfo日期时间格式。该类将用于Silverlight Datagrid。带有CultureInfo的DisplayFormat DateTime

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

它说,只有该参数只能是恒定的,typeof运算参数...

任何想法?

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

列如下:

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

回答

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以获取解决方案,以确保您的当前设置得到考虑。

+0

好吧,它不工作,因为我认为。我正在使用silverlight上的datagrid中的类。我是否也必须为datagrid列设置显示格式? – float 2012-07-20 06:20:02

+0

它看起来silverlight datagrid忽略这个属性,所以我会在datagrid列中使用格式字符串(我也觉得它优先在用户界面中具有UI格式,而不是隐藏在代码中) – Lukazoid 2012-07-20 07:13:42

+0

对于本地化,我要添加代码隐藏的datagrid列而不是xaml。你知道吗,如何添加这个字符串?看到我更新的帖子。 – float 2012-07-20 07:58:23

1

试过这样

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

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