假设我正在尝试实现一个功能,其中文本框只允许用户输入整数。我可以实现这两种方式,使用 ValidationRule 检查用户输入的任何内容并通过 XAML 将其绑定到文本属性,或者我可以创建新行为并将其附加到控件(而不是通过绑定)。
两者上的 XAML 示例:
行为:
<TextBox behaviors:DigitsOnlyBehavior.IsDigitOnly="True"/>
ValidationRule 绑定到窗口的 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>
这些方法的优点和缺点是什么?我应该什么时候使用它们?或者这是一个偏好问题?