2

WindowsPhone7アプリケーションの多くの場所に表示されている日時を使用しています。デフォルトの日付形式は見苦しく、私はそれを次のようにフォーマットしました。

<TextBlock Text="{Binding Date, StringFormat='MMM d, h:mm tt'}"/>

上記のコードの明らかな問題は、どこでも同じようにこのコピー貼り付けを行わなければならないことです。したがって、日付形式がどこかで変更された場合、どこでも同じことを冗長に行う必要があります。Silverlight / C#でこれを処理するためのより良い方法はありますか?

さらに良いことに、アプリケーション全体のDate.ToString()をオーバーライドして、そこでフォーマットを実行し、このようなコードを簡単に作成できるようにする方法があります(Rubyを実行し、Rubyではこれが可能です)。

<TextBlock Text="{Binding Date}"/>

両方が不可能な場合は、この問題を解決するために私を案内してください。

4

2 に答える 2

1

Anurajが述べたように、ValueConverterは非常に実行可能なソリューションである可能性があります。もう1つの方法は、バインドしようとしているオブジェクトに日付文字列のプロパティを作成することです。すなわち:

public class Item
{
    public Date Date { get; set; }
    public string DateString 
    {
        get { return "Today is: " + Date.Month + "/ + Date.Day; }
    }
}

どちらも実行可能なオプションですが、ValueConverterを使用すると、コードの冗長性がさらに低くなります。もう1つのオプションは、すべての変換コード(つまり、日付オブジェクトの文字列表現- public string DateToString( Date d ))を保持する一種のユーティリティクラスを作成することです。

3番目のオプションは、Date.ToString()メソッドをオーバーライドすることです。これを行う方法は、単にクラスを派生させ(たとえば、Dateそれを呼び出す)、次のようにすることです。FDate

public class FDate : Date
{
    public override string ToString()
    {
        StringBuilder sb = new StringBuilder();
        // create the string you'd like
        return sb.ToString();
    }
}

ハッピーコーディング!

于 2012-07-25T08:52:24.127 に答える