Вы можете использовать преобразователь значений для этого, но вы не должны. Вы можете просто использовать 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}}" />
Я был так счастлив, пока я не прочитал последнюю строку относительно SL4 :( – VoodooChild
я, наконец, пришел над моей лень и закончил с (см. мой ответ) – VoodooChild
Ahh Я просто добавил это к моему ответу. – Josh