2010-07-20 3 views
3

У меня есть этот объект ОПЛАТАкак преобразовать нулевое значение привязки нуля в пустую строку?

public class Payment 
{ 
    public Guid Id { get; set; } 
    public double Amount { get; set; } 
} 

который данные привязаны к TextBox

<TextBox x:Name="_AmountTB" Text="{Binding Path=Amount, Mode=TwoWay}" /> 

я требую, чтобы каждый раз, когда сумма равна 0, то я ничего не показывают в TextBox, как может это будет сделано?

Я думаю какой-то конвертер, но мне нужен кто-то, чтобы показать мне, как это сделать, пожалуйста ?!

Спасибо,

Voodoo

ответ

4

Вы можете использовать преобразователь значений для этого, но вы не должны. Вы можете просто использовать StringFormat расширения разметки Binding, чтобы указать three-part custom numeric format string. Это будет выглядеть следующим образом:

<TextBox Text="{Binding Path=Amount, StringFormat='0.00;-0.00;#'}" /> 

точка с запятой в формате строке говорит .NET использовать первый раздел для форматирования положительных чисел, средняя секции форматировать отрицательные числа, а последний раздел для форматирования нулевых значений. Сложная часть получает пустую строку для нулевой части, для которой я использовал знак фунта (#). Этот спецификатор формата показывает значительную цифру на своем месте, но поскольку значение всегда будет равным нулю при использовании этого раздела, это приведет к пустой строке.

Обратите внимание, что для StringFormat требуется Silverlight 4. Если вы используете Silverlight 3, вам понадобится конвертер значений. (Вы можете сделать это обрабатывать ошибки более надежно ...)

public class ZeroConverter : IValueConverter { 

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return String.Format(culture, "{0:0.00;-0.00;#}", value); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     string str = value as string; 
     if (!String.IsNullOrEmpty(str)) { 
      return System.Convert.ChangeType(str, targetType, culture); 
     } 
     return System.Convert.ChangeType(0, targetType, culture); 
    } 

} 

XAML

<UserControl> 
    <UserControl.Resources> 
     <local:ZeroConverter x:Key="ZeroToEmpty" /> 
    </UserControl.Resources> 
</UserControl> 
<TextBox Text="{Binding Path=Amount, Converter={StaticResource ZeroToEmpty}}" /> 
+0

Я был так счастлив, пока я не прочитал последнюю строку относительно SL4 :( – VoodooChild

+0

я, наконец, пришел над моей лень и закончил с (см. мой ответ) – VoodooChild

+1

Ahh Я просто добавил это к моему ответу. – Josh

1
public class BlankZeroConverter : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, 
           System.Globalization.CultureInfo culture) 
     { 
      if (value == null) 
       return null; 

      if (value is double) 
      { 
       if ((double)value == 0) 
       { 
        return string.Empty; 
       } 
       else 
        return value.ToString(); 

      } 
      return string.Empty; 
     } 
    } 
Смежные вопросы