2012-11-27 25 views
5

tôi nhận được một định dạng ngày tháng như:Làm thế nào để làm cho DisplayFormat cấu hình thuộc tính

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

Bây giờ, tôi muốn làm cho tất cả các định dạng datetime trong ứng dụng của tôi đọc từ một tập tin cấu hình. như:

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

nhưng điều này sẽ không biên dịch.

Làm thế nào tôi có thể làm điều này?

Trả lời

7

Vấn đề với điều này là NET chỉ cho phép bạn đặt các hằng số thời gian biên dịch trong các thuộc tính. Một lựa chọn khác là để kế thừa từ DisplayFormatAttribute và tra cứu các định dạng hiển thị trong các nhà xây dựng, như vậy:

SomeClass.cs

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

DynamicDisplayFormatAttribute.cs

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

Sau đó, bạn có thể sử dụng nó như vậy:

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

Tôi đã tạo một hằng số chuỗi trong một lớp cơ sở và đã phân loại các kiểu xem của tôi ra sao cho tôi có thể sử dụng nó.

Ví dụ:

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; } 
} 

Bằng cách này tôi cũng có thể tham khảo nó với subclassing:

public class AnotherViewModel 
{ 
    [DisplayFormat(ApplyFormatInEditMode = true, 
        DataFormatString = "{0:" + BaseViewModel.DateFormat + "}")] 
    public DateTime? CreatedOn { get; set; } 
} 
Các vấn đề liên quan