Упростите использование ValidationRules

Я работаю над проектом С# в WPF.

В моих основных окнах у меня есть 5 (может быть, позже) TextBox, каждое поле содержит float со значением от 0 до 100.

Я создал правило проверки:

class RangeValidationRule : ValidationRule
{
    public float MinValue { get; set; }
    public float MaxValue { get; set; }

    public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
    {
        float intValue;

        string text = String.Format("Must be between {0} and {1}",
                       MinValue, MaxValue);
        if (!float.TryParse(value.ToString(), out intValue))
            return new ValidationResult(false, "Not a float");
        if (intValue < MinValue)
            return new ValidationResult(false, "To small. " + text);
        if (intValue > MaxValue)
            return new ValidationResult(false, "To large. " + text);
        return ValidationResult.ValidResult;
    }
}

Но я не знаю, как упростить его использование. На самом деле я использую это так:

<TextBox Grid.Row="3" Grid.Column="1"
         Style="{StaticResource StyleTextBox}">
    <TextBox.Text>
        <Binding Path="ValueToBind" UpdateSourceTrigger="PropertyChanged">
            <Binding.ValidationRules>
                <local:RangeValidationRule MinValue="0" MaxValue="100"/>
            </Binding.ValidationRules>
        </Binding>
    </TextBox.Text>
</TextBox>

Как я могу упростить свой код? Могу ли я создать стиль для этого типа TextBox?

<Style x:Key="StyleTextBox0To100" TargetType="TextBox"
       BasedOn="{StaticResource StyleTextBox}">
       <!-- What should I write ? -->
</Style>

person A.Pissicat    schedule 21.12.2016    source источник


Ответы (1)


Решение, которое вы ищете, это Группа привязки

Ранее заданный вопрос

person WPFUser    schedule 21.12.2016
comment
Я пробовал оба способа использования BindingGroup (с Validation.ValidationAdornerSiteFor и BindingGroupName), но у меня это не работает. Я наверное что-то пропустил, но не знаю что - person A.Pissicat; 21.12.2016