2012-11-27 59 views
5

我有一個日期格式,如:如何使配置DisplayFormat屬性

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")] 
public DateTime? CreatedOn { get; set; } 

現在,我想在我的應用程序從一個配置文件讀取每個日期時間格式。像:

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = SomeClass.GetDateFormat())] 
public DateTime? CreatedOn { get; set; } 

但這不會編譯。

我怎樣才能做到這一點?

回答

7

的問題,這是.NET只允許你把編譯時間常數的屬性。另一種選擇是從DisplayFormatAttribute繼承和查找的顯示格式在構造函數中,像這樣:

SomeClass.cs

public class SomeClass 
{ 
    public static string GetDateFormat() 
    { 
     // return date format here 
    } 
} 

DynamicDisplayFormatAttribute.cs

public class DynamicDisplayFormatAttribute : DisplayFormatAttribute 
{ 
    public DynamicDisplayFormatAttribute() 
    { 
     DataFormatString = SomeClass.GetDateFormat(); 
    } 
} 

然後你可以使用它如下:

[DynamicDisplayFormat(ApplyFormatInEditMode = true)] 
public DateTime? CreatedOn { get; set; } 
0

我在基類中創建了一個字符串常量,並對我的視圖模型進行了子類化,所以我可以使用它。

例如:

public class BaseViewModel : IViewModel 
{ 
    internal const string DateFormat = "dd MMM yyyy"; 
} 

public class MyViewModel : BaseViewModel 
{ 
    [DisplayFormat(ApplyFormatInEditMode = true, 
        DataFormatString = "{0:" + DateFormat + "}")] 
    public DateTime? CreatedOn { get; set; } 
} 

這樣我也可以用子類引用它:

public class AnotherViewModel 
{ 
    [DisplayFormat(ApplyFormatInEditMode = true, 
        DataFormatString = "{0:" + BaseViewModel.DateFormat + "}")] 
    public DateTime? CreatedOn { get; set; } 
}