두 가지 속성 : sEmailAddress 및 sEmailCompare를 가진 간단한 viewmodel 클래스가 있습니다. 두 개의 텍스트 상자가있는 간단한보기 (창)가 있습니다. 데이터 컨텍스트는 viewmodel의 인스턴스로 설정됩니다. 다음과 같이 두 개의 텍스트 상자는 설정 유효성 검사 속성, 뷰 모델의 두 가지 속성에 바인딩 :Silverlight 데이터 유효성 검사 사용자 지정 클라이언트 쪽 클래스
Public Function Validate() As Boolean
If Validator.TryValidateObject(Me, New ValidationContext(Me), New List(Of ValidationResult), True) Then
Return True
Else
Validator.ValidateObject(Me, New ValidationContext(Me), True)
Return False
End If
End Function
그리고 데이터 주석 속성을 다음과 같이
Text="{Binding sEmailAddress,
Mode=TwoWay,
NotifyOnValidationError=True,
UpdateSourceTrigger=PropertyChanged,
ValidatesOnDataErrors=True,
ValidatesOnExceptions=True}"
내 뷰 모델은 유효성 검사 방법이있다 : 나는 빈 필드를 떠날 경우
Private _sEmailAddress As String
<Required>
Public Property sEmailAddress As String
Get
Return _sEmailAddress
End Get
Set(ByVal value As String)
If _sEmailAddress <> value Then
_sEmailAddress = value
OnPropertyChanged("sEmailAddress")
End If
End Set
End Property
Private _sEmailAddressConfirm As String
<Required>
<CustomValidation(GetType(MatchingEmailValidator), "ValidateEmail")>
Public Property sEmailAddressConfirm As String
Get
Return _sEmailAddressConfirm
End Get
Set(ByVal value As String)
If _sEmailAddressConfirm <> value Then
_sEmailAddressConfirm = value
OnPropertyChanged("sEmailAddressConfirm")
End If
End Set
End Property
실제 검증 부분
이 correctly- 작업 또는 두 필드 값이 일치하지 않는 경우, 다음 TryValidateObject false를 반환합니다. 그러나 UI는 변하지 않습니다. 그래서 ValidateObject를 호출 해 봅니다. 유효성 검사 예외를 throw합니다. 그렇지만 UI가 업데이트되고 텍스트 상자가 정상적으로 빨간색으로 윤곽이 그려지도록 예외를 처리하는 방법을 알지 못합니다.내가 누락 된 부분에 대해 알려 주실 분 있나요?
답변 해 주셔서 감사합니다. 따라서 ValidateObject 메서드를 Validate 메서드로 호출하면 내가 잘못하고있는 것처럼 보일 것입니다. ValidateObject 메서드를 setter로 이동하면 UI가 표준 유효성 검사를받습니다. 아마도 Setter에서 할 때 ValidateObject 대신 ValidateProperty를 사용해야 할 것입니다. – Josh
@Josh 예, 그게 더 합리적입니다. – McGarnagle