2014-09-23 2 views
0

Я пытаюсь поместить значение (двойной тип) в текстовое поле, и я хотел бы получить собственный формат.Множественная культура с текстовым полем

Чтобы объяснить, я ставлю 10001.1 или 10001,1, и я хотел бы иметь 10 001,1 в моем texblock.

В настоящий момент мой результат 10,001.00. Я не знаю, как правильно изменить формат.

Мой TextBlock является свяжет на это:

private double? _Total = null; 
    public double? Total 
    { 
     get 
     { 
      if (FiltreAffaire != null) 
       _Total = ListeAfterFiltre.Sum(CF => CF.CommandeFournisseurLignes.Where(CFL => CFL.Affaire.Numero == FiltreAffaire.Split('-').First().Trim()).Sum(CFL => CFL.Total_HT)); 
      else 
       return _ListeAfterFiltre.Sum(CF => CF.Montant_HT); 

      return _Total; 
     } 
     set 
     { 
      _Total = value; 
     } 
    } 

Благодарность

+1

Вы можете использовать [пользовательский формат] (http://stackoverflow.com/q/18361689/1997232). Непонятно, почему вы называете свой вопрос «Множественная культура». – Sinatr

ответ

1

Вы можете использовать простой StringFormat, чтобы получить требуемое значение ... если вы находитесь в стране, которая использует запятую в качестве десятичный разделитель:

DoubleValue = 10001.1; 

...

<TextBlock Text="{Binding DoubleValue, StringFormat={}{0:### ###.#}}" /> 

В Англии, это будет выводить следующее:

10 001.1 

Во Франции, эта должна выход:

10 001,1 

Вы также можете сделать это в коде с помощью NumberFormatInfo class:

NumberFormatInfo numberFormatInfo = new NumberFormatInfo(); 
numberFormatInfo.NumberDecimalDigits = 1; 
numberFormatInfo.NumberDecimalSeparator = ","; 
numberFormatInfo.NumberGroupSeparator = " "; 
numberFormatInfo.NumberGroupSizes = new int[] { 3 }; 
string value = DoubleValue.ToString("N", numberFormatInfo); 

Это o utputs:

10 001,1 
0

я, наконец, использовать что-то вроде этого (на Textbox):

  CultureInfo ci = (CultureInfo)Thread.CurrentThread.CurrentUICulture.Clone(); 
     ci.NumberFormat.NumberDecimalSeparator = "."; 
     Thread.CurrentThread.CurrentUICulture = ci; 
     Thread.CurrentThread.CurrentCulture = ci; 

и конвертер для установки значения.

ValueConverter="{StaticResource StringToDoubleConverterN3Key}" 

public class StringToDoubleConverterN3 : IValueConverter 
{ 

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return ((double)value).ToString("N3").Replace('.', ','); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return value; 
    } 
} 
Смежные вопросы