假设我正在尝试实现一个功能,其中文本框仅允许用户输入整数。我可以实现这两种方式,使用ValidationRule检查用户输入的任何内容并通过XAML将其绑定到text属性,或者我可以创建一个新行为并将其附加到控件(而不是通过绑定)。
两者的XAML示例:
行为:
<TextBox behaviors:DigitsOnlyBehavior.IsDigitOnly="True"/>
ValidationRule绑定到Window的Text属性
<TextBox>
<TextBox.Text>
<Binding RelativeSource = "{RelativeSource Mode=FindAncestor, AncestorType=Window}" Path="Text" UpdateSourceTrigger="PropertyChanged" Mode="TwoWay">
<Binding.ValidationRules>
<utils:RestrictInputTypeValidator Restriction="IntegersOnly" ValidatesOnTargetUpdated="True"/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
这些方法有哪些优点和缺点?我应该什么时候使用它们?或者这是一个偏好的问题?
答案 0 :(得分:0)
使用行为我喜欢并期望“积极”的场景/工作流程没有错误。重点是没有错误。用户可以非常快速地在TextBox中键入“a
”时使用数字行为而不接受它,这是一个数字文本框,这就是它的工作原理。
通过验证,重点似乎更多地放在错误上。我可以有一个数字文本框,但如果你输入“101
”,我也不会超过100,我告诉你这是不可接受的。这里的重点是通过抛出验证错误来引导用户进入不可接受的范围。
行为优势:
行为缺点:
- 可能会让人感到困惑,所以如果你让逻辑不接受'101',就没有默认的方式来引导用户。