Обязательное выражение с помощью StringFormat и конвертера в верхнем регистре? - PullRequest
1 голос
/ 23 февраля 2012

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

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

Ответы [ 2 ]

7 голосов
/ 23 февраля 2012

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
}
3 голосов
/ 23 февраля 2012

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

...