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

Voo*_*ild 3 c# data-binding silverlight

我有这个 Payment 对象

public class Payment 
{
    public Guid Id { get; set; }
    public double Amount { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这是绑定到 TextBox 的数据

<TextBox x:Name="_AmountTB" Text="{Binding Path=Amount, Mode=TwoWay}" />
Run Code Online (Sandbox Code Playgroud)

我要求每当金额为 0 时,我就不会在文本框中显示任何内容,该怎么办?

我正在考虑某种转换器,但我需要有人告诉我如何做到这一点?!

谢谢,

巫毒教

Jos*_*osh 5

您可以为此使用值转换器,但您不需要这样做。您可以简单地使用 Binding 标记扩展的 StringFormat 来指定由三部分组成的自定义数字格式字符串。它看起来像这样:

<TextBox Text="{Binding Path=Amount, StringFormat='0.00;-0.00;#'}" />
Run Code Online (Sandbox Code Playgroud)

字符串格式中的分号告诉 .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);
    }

}
Run Code Online (Sandbox Code Playgroud)

XAML

<UserControl>
    <UserControl.Resources>
        <local:ZeroConverter x:Key="ZeroToEmpty" />
    </UserControl.Resources>
</UserControl>
<TextBox Text="{Binding Path=Amount, Converter={StaticResource ZeroToEmpty}}" />
Run Code Online (Sandbox Code Playgroud)