带验证的文本框。即使输入的文本无效,如何更新目标 属性?
TextBox with Validation. How to update the target property even if the entered text is not valid?
我的视图中有一个 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>
这是我的验证 class:
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
?
的文本
如果你想显示输入错误的可见指示器但仍保留记录,你可以做的是使用 ValidatesOnExceptions
,下面的文章对此做了很好的解释:
Data Validation in WPF
它的意思是如果存在到支持 属性 的转换错误,但是没有什么可以阻止您将值输入 属性 [= 中的 ViewModel 字段16=] 然后执行解析并根据需要抛出异常。这样,您将获得值集的副本以及显示存在错误的 UI。
将 ValidationRule
的 ValidationStep
属性 设置为 UpdatedValue
将导致它 运行 after 来源 属性 已更新:
<Binding.ValidationRules>
<local:FormulaValidationRule ValidationStep="UpdatedValue" />
</Binding.ValidationRules>
默认值为RawProposedValue
,这意味着在值转换发生之前验证规则是运行并且正在设置源属性。
我的视图中有一个 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>
这是我的验证 class:
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
?
如果你想显示输入错误的可见指示器但仍保留记录,你可以做的是使用 ValidatesOnExceptions
,下面的文章对此做了很好的解释:
Data Validation in WPF
它的意思是如果存在到支持 属性 的转换错误,但是没有什么可以阻止您将值输入 属性 [= 中的 ViewModel 字段16=] 然后执行解析并根据需要抛出异常。这样,您将获得值集的副本以及显示存在错误的 UI。
将 ValidationRule
的 ValidationStep
属性 设置为 UpdatedValue
将导致它 运行 after 来源 属性 已更新:
<Binding.ValidationRules>
<local:FormulaValidationRule ValidationStep="UpdatedValue" />
</Binding.ValidationRules>
默认值为RawProposedValue
,这意味着在值转换发生之前验证规则是运行并且正在设置源属性。