2013-09-23 4 views
3

У меня есть много номеров, чтобы иметь дело с моим пользовательским интерфейсом. Я хочу, чтобы некоторые из них не были запятыми, а некоторые - двумя десятичными знаками, а другие - тем, что они введены (3 или 4 десятичных знака).преобразователи wpf с различным десятичным числом

У меня есть конвертер с именем DoubleToStringConverter так:

[ValueConversion(typeof(double), typeof(string))] 
public class DoubleToStringConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return value == null ? null : ((double)value).ToString("#,0.##########"); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     double retValue; 
     if (double.TryParse(value as string, out retValue)) 
     { 
      return retValue; 
     } 
     return DependencyProperty.UnsetValue; 
    } 
} 

Есть ли способ, чтобы написать только один конвертер для достижения этой цели? Кажется, что нет никакого способа параметризованного преобразователя. StringFormat в xaml, похоже, преобразует строку в другой тип данных. Он не позволяет отображать подстроку из xaml.

Я могу только думать о создании IntegerToStringConverter, Double2ToStringConverter, Double3ToStringConverter и т. Д. Но я хотел бы узнать, есть ли более эффективный способ.

+0

Почему вы не используете 'parameter', чтобы указать ваши значащие цифры? – Khan

+0

Да. Вы [можете добавить параметр к своей привязке] (http://msdn.microsoft.com/en-us/library/system.windows.data.binding.converterparameter.aspx). Он доступен в параметре подписи метода. Вы можете преобразовать это в строку, затем определить приведение, которое вам нужно сделать (int/double/long), а затем вызвать ToString на нем. используйте 'targetType' на обратной стороне, чтобы определить, что нужно анализировать. Не знаете, где у вас проблема. – Will

ответ

5

Вы можете передать число десятичных знаков для использования в качестве parameter, которое затем может быть указано в XAML через ConverterParameter в пределах привязки.

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

<TextBox Text="{Binding Path=TheDoubleValue, StringFormat=0:N2} /> 
+0

:/'StringFormat =" 0: N2 "и' "{" + parameter + "}" 'будет проще. – Will

+0

@Will Что вы имеете в виду о '" {"+ parameter +"} "' проще? Хороший вопрос о «0: N2». –

+0

О, er, создавая строку формата в теле метода. Что здесь действительно не нужно. Продолжать. – Will

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