【问题标题】:Data Annotations ValidationException was unhandled by user Code用户代码未处理数据注释 ValidationException
【发布时间】: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


    【解决方案1】:

    这个问题是由 Visual Studio 调试器引起的,如果你在没有调试器的情况下运行它,或者在抛出异常后继续,它应该会按预期进行验证。

    如果这是一个问题,您可以考虑使用 IDataErrorInfo 而不是异常进行验证。对于涉及自定义异常的不同选项,请参阅此answer 以获取相同的答案。

    【讨论】:

      猜你喜欢
      • 2012-11-21
      • 2023-03-30
      • 2013-12-28
      • 2014-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多