可以为Nullable的数据库属性,但texbox在删除内容时仍显示红色边框

时间:2010-12-01 07:15:19

标签: wpf validation entity-framework-4 binding

您好我将WPF文本框绑定到Entity Framework属性,如下所示:

<TextBox Grid.Column="1" Grid.Row="0" Margin="5,2" 
         Text="{Binding Path=MyEntityObject.SizeLower, Mode=TwoWay}" />

它与属性绑定良好,当我更改它时,它会按预期保存到数据库。但是,如果我删除文本框的内容,我会得到它周围的红色错误边框。我没有任何验证器,所以我猜测texbox抱怨价值不可空。但实际上DB中的这个属性是可以为空的,所以我无法理解它为什么会出错。

系统生成的EF属性定义如下:

<EdmScalarPropertyAttribute(EntityKeyProperty:=false, IsNullable:=true)>
<DataMemberAttribute()>
Public Property SizeLower() As Nullable(Of Global.System.Int64)
    Get
        Return _SizeLower
    End Get
    Set
        OnSizeLowerChanging(value)
        ReportPropertyChanging("SizeLower")
        _SizeLower = StructuralObject.SetValidValue(value)
        ReportPropertyChanged("SizeLower")
        OnSizeLowerChanged()
    End Set
End Property

Private _SizeLower As Nullable(Of Global.System.Int64)

我有什么遗失的吗?我认为绑定系统能够确定属性是否可以为空并且如果允许则允许空值?

如何查看错误是什么?徘徊似乎无法解决问题。

感谢您的任何建议。

=================================== 附加信息

如果我选择全部并删除,然后更改焦点,则会出现验证框。这是前后的一个屏幕截图。此外,我已经确认我可以手动将NULL添加到数据库中以获取绑定属性,这样就不会出现问题。

拒绝。试图把图片放在这里,但我没有10分......! 这是一个非现场链接:CLICK HERE

1 个答案:

答案 0 :(得分:18)

您应该将TargetNullValue属性添加到绑定中:

<TextBox Grid.Column="1" Grid.Row="0" Margin="5,2" 
         Text="{Binding Path=MyEntityObject.SizeLower, 
         Mode=TwoWay, 
         TargetNullValue=''}" />

这告诉绑定将MyEntityObject.SizeLower中的空值视为显示的string.empty,设置时将string.empty视为null。