2012-02-22 42 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 2012-02-22 21:01:02

+0

我會upvote你的答案和H.B.'s,但我必須等到15代表 – user46874 2012-02-22 21:12:54

3

轉換器應StringFormat之前應用,因此,如果StringFormat再次摧毀它,你可能會想,格式化邏輯移動到轉換器(或申請使用各種各樣的一組轉換器多個轉換器)。