リソースが正しくローカライズされたアプリがあります。ただし、日時のデータバインドは常に en-US 形式を使用して表示されます。
起動時に App クラスをチェックインしたところ、CurrentCulture と CurrentUICulture の両方が期待されるカルチャに設定されています。
私の知る限り、日付の書式設定は適用されていません。
現在のカルチャで書式設定された日付を取得するにはどうすればよいですか?
リソースが正しくローカライズされたアプリがあります。ただし、日時のデータバインドは常に en-US 形式を使用して表示されます。
起動時に App クラスをチェックインしたところ、CurrentCulture と CurrentUICulture の両方が期待されるカルチャに設定されています。
私の知る限り、日付の書式設定は適用されていません。
現在のカルチャで書式設定された日付を取得するにはどうすればよいですか?
DateTimeをビューに渡し、バインディングに依存して正しい形式に変換するのではなく、既存のプロパティをラップするが適切な変換/フォーマットを適用する追加のプロパティを作成します。
例えば
public class MyViewModel
{
public DateTime StartDate { get; set; }
public string LocalizedStartDate
{
get
{
return this.StartDate.ToString(CultureInfo.CurrentUICulture);
}
}
}
次にバインドします。
<TextBlock Text="{Binding LocalizedStartDate}" .... />
StartDate
プロパティのデータ型を文字列に変更する必要があります。
string _startDate;
public string StartDate
{
get { return _startDate; }
set
{
_startDate = value;
OnPropertyChanged("StartDate");
}
}
に値を代入するときは、便宜上、次のメソッドStartDate
のオーバーロードのいずれかを使用します。ToString()
StartDate = DateTime.Now.ToString();
StartDate = DateTime.Now.ToString("d");
StartDate = DateTime.Now.ToString("D");
非常に簡単な解決策があることがわかりました。
IValueConverterを追加し、バインディング式でコンバーターを使用しますが、カルチャ引数を無視すると、書式設定は完全に機能します。
異なる形式ごとに 1 つのコンバーターが必要になります (引数を取らない場合)。
コンバーター (サンプルから属性を削除):
public class DateConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
DateTime date = (DateTime)value;
return date.ToShortDateString();
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
string strValue = value as string;
DateTime resultDateTime;
if (DateTime.TryParse(strValue, out resultDateTime))
{
return resultDateTime;
}
return DependencyProperty.UnsetValue;
}
}
名前空間
xmlns:conv="clr-namespace:Sjofartsverket.LotsPDA20.Client.Converters"
資源
<conv:DateConverter x:Key="dateConverter" />
結合式:
<TextBlock Text="{Binding StartDate, Converter={StaticResource dateConverter}}"
結果: 日付が正しいカルチャで表示されます。