2012-02-22 4 views
1

У меня есть TextBlock, текст которого обязуется жить ticker (через System.Date.Now), и эта привязка содержит ValueConverter, который должен преобразовать строку в верхний регистр. Однако строка не приводит к прописным буквам (результат такой же, как если бы конвертер даже не был там). Как получить результат привязки в верхнем регистре?Связывание выражения с помощью преобразования StringFormat и верхнего регистра?

<TextBlock 
     Text="{Binding Now, 
         Source={StaticResource ticker}, 
         StringFormat={}{0:dddd\, MMMM d}, 
         Converter={StaticResource CaseConverter}}" /> 

ответ

7

H.B. верно. Вам нужен лучший конвертер:

<TextBlock Text="{Binding Now, Source={StaticResource ticker}, Converter={StaticResource UpperCaseDateConverter}, ConverterParameter='dddd, MMMM d'}" /> 

конвертер:

public class UpperCaseDateConverter : IValueConverter 
{ 
    #region Implementation of IValueConverter 

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return ((DateTime)value).ToString((string)parameter).ToUpperInvariant(); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 

    #endregion 
} 
+0

Спасибо! Я на самом деле пришел к такому же выводу (аналогичный код, даже). Я как раз собирался опубликовать свой ответ, но ваш приятный и краткий. :) – user46874

+0

И я бы поднял ваш ответ и H.B., но мне нужно подождать до 15 повторений – user46874

3

Преобразователь должен быть применен перед StringFormat, так что если StringFormat разрушает его снова, вы можете переместить эту логику форматирования в преобразователь (или применять несколько преобразователей с использованием групповой-конвертер сортов).

Смежные вопросы