2013-09-24 26 views
1

我有我的視圖模型的雙重價值,並希望綁定TextBlock中的文本,使得:如何使用文化將一個綁定格式化爲這樣的######。## ##

128228.094545被格式化爲128228 [X] 09,其中[x]是根據計算機的區域性設置小數點分隔符。

我已經試過:

Text="{Binding Value, StringFormat='{}{0:F2}'}" 

不起作用:值上顯示128228.09不管正確的小數點分隔符號。

Text="{Binding Value, StringFormat='{}{0:N2}'}" 

呈現數字分組符號([d],Y以en-US),我不想:128 [d] 228 [X] 09

Text="{Binding Value, StringFormat='{}{0:0.00}'}" 

顯然不工作。

什麼是正確的格式化字符串?

+0

尚未使用WPF,但不會'StringFormat ='{} {0:######。##}''(或者簡單地說'StringFormat ='{} { 0:#。##}'')工作? – Corak

+0

不是,因爲那呈現'。'總是,儘管文化可能有逗號。 – Marc

回答

1

我認爲這個問題是,當在的StringFormat數據被用來綁定它不尊重當前的文化。

在過去,我用一個簡單的IValueConverter來格式化值。如果您的應用程序允許用戶指定所有數字的格式選項,則此功能非常有用,例如小數位數。另外,您可以使用ConverterParameter指定格式字符串和簡單的返回:

String.Format(CultureInfo.CurrentCulture, converterParameter, value) 

如果你不需要包圍值與前綴或後綴以下轉爐應允許你轉換到從格式化的值:

public class StringFormatConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, 
          object parameter, CultureInfo culture) 
    { 
     var parameterString = parameter as string; 
     if (value != null && parameterString != null) 
     { 
      return String.Format(CultureInfo.CurrentCulture, "{0:"+ parameterString + "}", value); 
     } 
     else 
     {   
      return string.Empty; 
     } 
    } 


    public object ConvertBack(object value, Type targetType, 
           object parameter, CultureInfo culture) 
    { 
     if (targetType == typeof (double)) 
     { 
      return System.Convert.ToDouble(value, CultureInfo.CurrentCulture); 
     } 
     else if (targetType == typeof(int)) 
     { 
      return System.Convert.ToInt32(value, CultureInfo.CurrentCulture); 
     } 
     // Any other supported types 
     else 
     { 
      throw new NotImplementedException(); 
     } 
    } 
} 
+0

這對我來說很有用,謝謝,你介意發佈ConvertBack嗎?要分別處理每個可能的TargetType類型? – Marc

+0

基於TargetType,您應該能夠使用System.Convert,即'System.Convert.ToDouble(value,CultureInfo.CurrentCulture)'。我會稍後嘗試更新答案。 – peterot

1

我認爲你的第一個定義是正確的。事情是,格式化總是基於所設置的文化來完成。不知道你使用的是什麼,但它取決於如何設置你的應用程序的文化。

下面是描述它爲WPF,因爲有手動定義文化的一些問題,一個偉大的博客帖子...

http://www.west-wind.com/weblog/posts/2009/Jun/14/WPF-Bindings-and-CurrentCulture-Formatting

+0

我想要應用當前的文化,而不是自定義文化,但WPF明顯忽略它。 – Marc

相關問題