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

时间:2010-01-14 07:08:32

标签: wpf data-binding textbox null

我无法在可空的数据库字段上将空TextBox设置为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值时,传递null 如果我从TextBox中删除值,则传递的值是文本框的原始值,并且不会通知UI更改Grrrrrrrrrrrrrrrr

我花了很长时间检查选项 没有把代码放在每个可空字段的OnTextChanged后面,我无法看到这样做的效率。

提前致谢:

PS。已经看过TargetNullValue没有成功

Visual Studio 2008 - SP1 - .Net 3.5

3 个答案:

答案 0 :(得分:14)

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

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

我尝试了它,它适用于我。

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

StringFormat={}{0:C}

这甚至可能是您获得例外的原因。

答案 1 :(得分:4)

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

答案 2 :(得分:3)

对我来说只有转换器工作: 这是a link

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;
    }
}