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

3
我有一个 Payment 对象。
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时,文本框中不显示任何内容,应该如何实现?

我在考虑使用某种转换器,但我需要有人向我展示如何操作,请问可以提供帮助吗?

谢谢,

Voodoo

2个回答

5
您可以使用值转换器来实现此操作,但并非必须。您可以通过绑定标记扩展的StringFormat属性指定一个三部分自定义数字格式字符串来简单实现。它看起来像这样:三部分自定义数字格式字符串
<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}}" />

我终于克服了懒惰,最终得出了(请看我的答案)。 - VoodooChild
1
啊,我刚把它添加到我的回答中了。 - 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;
        }
   }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接