Для этого можно использовать 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}" />
Да, это правильно, но мой вопрос заключается в том, как «сгибать» эти строковые форматы? какой-то пользователь может установить этот параметр и волшебным образом, я хочу, чтобы они увидели первый формат, какой-то другой пользователь может установить этот параметр, и волшебным образом я хочу, чтобы они увидели другой формат. –
О, я вижу ... хорошая идея ... Позвольте мне просто держать его здесь немного дольше, чтобы узнать, есть ли у других людей другие идеи или нет. Спасибо –
@DevWannaBe Я только что понял, что мой предыдущий комментарий (который я сейчас удалил) был неправильным. Поскольку StringFormat не является DependencyProperty, вы не можете привязываться к нему. [This] (http://stackoverflow.com/a/4010782/1624581) ответ дает возможность обойти эту проблему, но она не совсем идеальна. – MoonBoots89