空文本框以一些十进制值绑定

时间:2012-11-15 06:03:10

标签: wpf

我有一个绑定到某个十进制值的文本框。现在,如果我在其中输入类似100的内容并完全清除它(空)。我保存数据,它以十进制值保存1。同样,如果我尝试200并清除文本框,则会保存2.记住十进制值不为空。有什么想法吗?

<TextBox 
    Height="23" 
    VerticalAlignment="Center" 
    Text="{Binding Discount,Mode=TwoWay}" 
    MaxLength="50" 
    TabIndex="28" 
    Grid.Row="2" 
    Grid.Column="1" 
    local:FocusExtension.IsFocused=
        "{Binding Path=IsDiscountFocused,Mode=TwoWay}" 
    Margin="5,0,0,0"/>

2 个答案:

答案 0 :(得分:4)

由于String.Empty默认情况下无法转换为小数。最后一个有效值保留在属性中。 您应该使用如下的转换器。

WPF

<Window.Resources>
    <local:ValueConverter x:Key="valueConverter" />
</Window.Resources>

<TextBox Text="{Binding Path=Value, Mode=TwoWay, Converter={StaticResource valueConverter}}" />

转换器:

public class ValueConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return value;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value is string && (string)value == "")
        {
            return 0;
        }

        return value;
    }
}

CLR:

public decimal Value
{
    get { return (decimal)GetValue(ValueProperty); }
    set { SetValue(ValueProperty, value); }
}

答案 1 :(得分:0)

我假设您的viewmodel中的Discount属性如下所示:

public decimal Discount {get;set;}

如果您使用退格键并清除文本框,则会出现绑定异常,因为“”无法转换为十进制。所以最后一个号码仍留在您的财产中。实际上这应该在使用UpdateSourceTrigger = Propertychanged时发生。但是你可以尝试使用小数?如果这没有帮助,您还可以添加转换器将“”转换为您的viewmodel可以处理的值。

编辑:我没有看到你最后的评论。但是如果您希望空文本框为0,只需使用转换器在输入“”时返回0。