如何将数据绑定零双值转换为空字符串?

时间:2010-07-20 02:26:42

标签: c# silverlight data-binding

我有这个付款对象

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

是绑定到TextBox的数据

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

我要求每当Amount为0,那么我不会在TextBox中显示任何内容,如何做到这一点?

我在想某种转换器,但我需要有人告诉我该怎么做?!

谢谢,

巫毒

2 个答案:

答案 0 :(得分:4)

您可以使用值转换器,但不需要。您可以简单地使用Binding标记扩展的StringFormat来指定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}}" />

答案 1 :(得分: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;
        }
   }
相关问题