2014-01-22 3 views
1

Основываясь на настройке в моем приложении, мне нужно показать различные форматы отображения даты в XAML. Например, он должен быть либо в формате "yyyy/MM/dd", либо в формате "MM/dd/yyyy".Форматирование формата даты в XAML во время выполнения

Какими способами я могу достичь этого? Обратите внимание, что места в моем приложении, которые мне нужны для этого, ограничены, поэтому даже решение «исправить на месте» будет работать и в моем случае.

Спасибо за предложения.

ответ

1

Для этого можно использовать ValueConverter. Просто замените YourApplicationSettings.YearFirst, где бы вы ни находились.

public class DateTime2FlexibleDateString : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     var dt = value as DateTime? 
     if (dt== null) 
     { 
      return null; 
     } 

     var dateTime = dt.Value; 

     if (YourApplicationSettings.YearFirst) 
     { 
      return dateTime.ToString("yyyy/MM/dd"); 
     } 

     return dateTime.ToString("MM/dd/yyyy"); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return null; 
    } 
} 

Тогда либо в каждом XAML файл, который нуждается в этом, или в App.xaml (или словаря ресурсов добавляется к App.xaml), добавить статический ресурс для преобразователя.

<UserControl.Resources> 
    <converters:DateTime2FlexibleDateString x:Key="DateTime2FlexibleDateString" /> 
</UserControl.Resources> 

А затем, когда вы привязываетесь к дате, укажите преобразователь.

<TextBlock Text="{Binding MyDateTimeVariable, Converter={StaticResource DateTime2FlexibleDateString}" /> 
1

Это зависит от контекста того, что вы делаете, но если вы связывание с DateTime, то вы можете изменить свойство StringFormat следующим образом:

<TextBlock Text="{Binding MyDateTimeVariable, StringFormat='yyyy/MM/dd'}" /> 
<TextBlock Text="{Binding MyDateTimeVariable, StringFormat='MM/dd/yyyy'}" /> 

Here является хорошим примером некоторых различных вариантов формата это будет достигнуто именно так.

+0

Да, это правильно, но мой вопрос заключается в том, как «сгибать» эти строковые форматы? какой-то пользователь может установить этот параметр и волшебным образом, я хочу, чтобы они увидели первый формат, какой-то другой пользователь может установить этот параметр, и волшебным образом я хочу, чтобы они увидели другой формат. –

+0

О, я вижу ... хорошая идея ... Позвольте мне просто держать его здесь немного дольше, чтобы узнать, есть ли у других людей другие идеи или нет. Спасибо –

+1

@DevWannaBe Я только что понял, что мой предыдущий комментарий (который я сейчас удалил) был неправильным. Поскольку StringFormat не является DependencyProperty, вы не можете привязываться к нему. [This] (http://stackoverflow.com/a/4010782/1624581) ответ дает возможность обойти эту проблему, но она не совсем идеальна. – MoonBoots89