Я никогда не использовал конвертер для проверки. Вместо этого я использую элементы, которые реализуют IDataErrorInfo с атрибутом в атрибуте привязки данных для ValidatesOnDataErrors = True.
Используя этот метод проверки, исходное значение сохраняется, и объект возвращает значение ошибки (в моем случае это строка с сообщением об ошибке). Элементы управления My View имеют пользовательский элемент проверки, который добавляет красную рамку, которая исчезает со временем, и всплывающую подсказку, которая появляется при наведении курсора мыши.
Тогда вам просто нужно поместить свои правила проверки в отображаемые вами классы данных:
Private Sub OnAddress1Changed()
Me.RemoveError("Address1")
If _Address1 Is Nothing OrElse _Address1.Trim = "" Then
Me.AddError("Address1", "Please enter a valid Address Line")
End If
OnPropertyChanged("CanShip")
End Sub
Private m_validationErrors As New Dictionary(Of String, String)
Private Sub AddError(ByVal ColName As String, ByVal Msg As String)
If Not m_validationErrors.ContainsKey(ColName) Then
m_validationErrors.Add(ColName, Msg)
End If
End Sub
Private Sub RemoveError(ByVal ColName As String)
If m_validationErrors.ContainsKey(ColName) Then
m_validationErrors.Remove(ColName)
End If
End Sub
Public ReadOnly Property [Error]() As String Implements System.ComponentModel.IDataErrorInfo.Error
Get
If m_validationErrors.Count > 0 Then
Return "Shipment data is invalid"
Else
Return Nothing
End If
End Get
End Property
Default Public ReadOnly Property Item(ByVal columnName As String) As String Implements System.ComponentModel.IDataErrorInfo.Item
Get
If m_validationErrors.ContainsKey(columnName) Then
Return m_validationErrors(columnName).ToString
Else
Return Nothing
End If
End Get
End Property
Редактировать
И просто для примера, я добавлю пример шаблона проверки, чтобы показать другим, как его подключить.
<Style x:Key="ToolTipValidation" TargetType="{x:Type Control}">
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<Border BorderBrush="Red" BorderThickness="2,1,2,1">
<AdornedElementPlaceholder/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="True">
<Setter Property="ToolTip" Value="{Binding (Validation.Errors)[0].ErrorContent, RelativeSource={x:Static RelativeSource.Self}}"/>
</Trigger>
</Style.Triggers>
</Style>
Наконец:
Статья MSDN о внедрении валидации
Видео с ним. Видео № 4