【发布时间】:2015-04-13 16:19:53
【问题描述】:
我一直在学习 Brian Noyes 关于 wpf 数据绑定的出色的复数课程,并且遇到了数据注释问题。
我首先下载了他的c# 示例并运行它,我看到了我期望看到的内容,并且看到了他在课程中的演示。然后我开始在我自己的项目中实现相同的功能(但在这种情况下是vb,而不是c#)。我正在使用实体Framework。
我按照这样的建议创建了一个EntityBase Class;
Imports System.ComponentModel.DataAnnotations
Public Class EntityBase
Protected Overridable Sub ValidateProperty(ByVal propertyName As String, ByVal value As Object)
Dim context As New ValidationContext(Me, Nothing, Nothing)
context.MemberName = propertyName
Validator.ValidateProperty(value, context)
End Sub
End Class
我在我的实体上继承这个基类,然后在实体的一个属性中设置一个数据注释并调用基类ValidateProperty 方法。
<System.ComponentModel.DataAnnotations.StringLength(6)> _
Public Overridable Property VesselPlnLetterPart() As String
Get
Return _VesselPlnLetterPart
End Get
Set
If (Object.Equals(_VesselPlnLetterPart, value) = false) Then
Me.OnVesselPlnLetterPartChanging(value)
OnPropertyChanging("VesselPlnLetterPart")
_VesselPlnLetterPart = value
ValidateProperty("VesselPlnLetterPart",value)
Me.OnVesselPlnLetterPartChanged()
OnPropertyChanged("VesselPlnLetterPart")
End If
End Set
End Property
Private _VesselPlnLetterPart As String
最后在Xaml我绑定到这个属性并设置ValidateOnExceptions= true。
<TextBox Margin="5" Width="50" Grid.Row="2" Grid.Column="1" CharacterCasing="Upper" HorizontalAlignment="Left" Text="{Binding Path=VesselPlnLetterPart, ValidatesOnExceptions=True}"/>
完全按照他的演示和示例中所做的那样,但是当我运行它时,它在 ValidateProperty 方法的最后一行中断,告诉我我有一个用户代码未处理的 ValidationException(因为我故意传递了一个字符串太长了,内部细节告诉我它超过了允许的长度。)在处理这个问题时,我错过了哪些重要的部分?
有没有人在尝试使用数据注释时遇到过这种情况,可以告诉我为什么会发生这种情况?
谢谢
【问题讨论】:
标签: wpf vb.net data-binding data-annotations