Скажем, я пытаюсь реализовать часть функциональности, в которой текстовое поле позволяет пользователю вводить только целые числа. Я могу реализовать это двумя способами: используя 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>
Каковы преимущества и недостатки этих подходов? Когда я должен их использовать? Или это вопрос предпочтений?