6

次のような日付形式を取得しました。

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

ここで、アプリケーションのすべての日時形式を 1 つの構成ファイルから読み取れるようにしたいと考えています。お気に入り:

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

しかし、これはコンパイルされません。

これどうやってするの?

4

2 に答える 2

8

これに関する問題は、.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; }
于 2012-11-27T02:51:00.723 に答える
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; }
}
于 2012-11-27T02:39:02.663 に答える