清空文本框不会将绑定设置为 null。

7

我在将可空数据库字段上的空文本框设置为null时遇到了困难。

XAML

<y:TextBox Text="{Binding Year1Cost, Mode=TwoWay,  
     UpdateSourceTrigger=PropertyChanged,   
     NotifyOnValidationError=True,   
     ValidatesOnDataErrors=True,   
     ValidatesOnExceptions=True,  
     StringFormat=\{0:c\}}" Grid.Row="3" Grid.Column="1" />

当我输入任何值时,绑定是正常的,并且输入的值被传递了。当我不输入任何值时,会传递一个null值。如果我从文本框中删除值,则传递的值是文本框的原始值,并且UI没有收到更改通知。我已经花费很长时间来检查选项,除非在每个可空字段的OnTextChanged后面放置代码,否则我看不到效率。提前感谢您的帮助。PS. 已经查看过TargetNullValue但没有成功。Visual Studio 2008-SP1-.Net 3.5。
3个回答

15

将绑定的属性TargetNullValue设置为 String.Empty

<TextBox Text="{Binding TargetNullValue={x:Static sys:String.Empty}}"/>

我尝试过它,并且对我有效。

如果我没错的话(如果我错了,请原谅我),你应该像这样设置StringFormat属性:

StringFormat={}{0:C}
这甚至可能是你遇到异常的原因。

xmlns:sys="clr-namespace:System;assembly=mscorlib" 我尝试了这个,但一直出现错误24,无法从程序集'Microsoft.Windows.Design.Extensibility, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'中加载类型'Microsoft.Windows.Design.Metadata.ProvideMetadataAttribute'。行'1'位置'6680'。 - Traci
我不知道。 但如果我是你,我会尝试只使用TextBox而不包含其他定义;只绑定和TargetNullValue。 这种方式可以帮助你找到异常的来源。 - Shimmy Weitzhandler
尝试完全删除StringFormat,但仍然收到相同的消息。--- <TextBox Text="{Binding Year1Cost, TargetNullValue={x:Static sys:String.Empty}}" /> ---- 这就是我所拥有的,但仍然会出现上述异常。 - Traci
我真的不知道 :( 我希望我能帮助你。 - Shimmy Weitzhandler

4
考虑使用值转换器。您应该能够实现ConvertBack方法将空字符串转换为null。

不知何故,空字符串未触发属性更改事件,因此必须转换为空格。感谢您的帮助,我将在所有必要的地方实施。 - Traci

3

对我来说,只有转换器起作用: 这里是链接

public class NullableConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
       return value == null ? string.Empty : String.Format(culture, "{0}", value);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
       return string.IsNullOrEmpty(String.Format(culture, "{0}", value)) ? null : value;
    }
}

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