我有一个绑定到某个十进制值的文本框。现在,如果我在其中输入类似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"/>
答案 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。