我的视图中有一个TextBox
,绑定到了我的ViewModel中的属性MyText
。我还输入了ValidationRule
。
这是我视图中的TextBox
:
<TextBox>
<TextBox.Text>
<Binding Path="MyText"
UpdateSourceTrigger="PropertyChanged"
Mode="TwoWay"
ValidatesOnNotifyDataErrors="True"
ValidatesOnDataErrors="True"
NotifyOnValidationError="True">
<Binding.ValidationRules>
<local:FormulaValidationRule />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
这是我的验证类:
Public Class MyTextValidationRule
Inherits ValidationRule
Public Overrides Function Validate(value As Object, cultureInfo As CultureInfo) As ValidationResult
Dim validationRes = MyParser.ValidateText(value)
If validationRes Then
Return ValidationResult.ValidResult
Else
Return New ValidationResult(False, "Input is not valid")
End If
End Function
End Class
我想要的是即使输入的文本无效,我的属性MyText
也已更新,但是,就像我现在所拥有的一样,该属性仅在文本为已验证。有什么方法可以做到,即更新属性或访问我的TextBox
的文本?
答案 0 :(得分:2)
将ValidationStep
的{{1}}属性设置为ValidationRule
将导致它在更新源属性后 运行:
UpdatedValue
默认值为<Binding.ValidationRules>
<local:FormulaValidationRule ValidationStep="UpdatedValue" />
</Binding.ValidationRules>
,这意味着验证规则是在值转换和设置source属性之前运行的。
答案 1 :(得分:0)
如果要显示可见的指示符来指示输入错误,但仍然保留它的记录,该怎么办是使用ValidatesOnExceptions
,下面的文章对此做了很好的解释:
Data Validation in WPF
这是为了表示后备属性发生转换错误,但是没有什么可以阻止您将值带入属性设置器中的ViewModel字段,然后执行解析并根据需要抛出Exception。这样,您将获得一个值集的副本,而且还拥有显示错误的UI。