ValidationRule для текстового поля WPF

Я новичок в WPF. В моем UserControl у меня есть 8 меток и соответствующие 8 текстовых полей следующим образом:

1.Label : abc   2.Label : def
  TextBox1 :        TextBox2 :

3.Label :xyz    4. Label : ghi
  Textbox3 :        TextBox4 :

Каждое из этих текстовых свойств текстового поля должно содержать текст, заканчивающийся соответствующим именем метки, для TextBox1.text должно быть xxxx.abc, TextBox2.text должно быть xxxx.def и т. д. Если нет, текстовое поле должно иметь красную рамку.

надеюсь, я понял детали. Так что мне нужно писать разные ValidationRule для каждого текстового поля??

Любые ваши материалы??


person Patil    schedule 23.01.2013    source источник


Ответы (1)


Почему бы не иметь одну реализацию ValidationRule со свойством, показывающим, чем должно заканчиваться поле, например:

public class EndsWithValidationRule : ValidationRule
{
    public string MustEndWith { get; set; }

    public override ValidationResult Validate(object value, CultureInfo cultureInfo)
    {
        var str = value as string;
        if(str == null)
        {
            return new ValidationResult(false, "Please enter some text");
        }
        if(!str.EndsWith(MustEndWith))
        {
            return new ValidationResult(false, String.Format("Text must end with '{0}'", MustEndWith));
        }
        return new ValidationResult(true, null);

    }
}

Затем вы можете использовать это так:

<TextBox x:Name="TextBox1">
    <TextBox.Text>
        <Binding Path="BoundProperty1" UpdateSourceTrigger="PropertyChanged">
            <Binding.ValidationRules>
                <local:EndsWithValidationRule MustEndWith=".def" />
            </Binding.ValidationRules>
        </Binding>
    </TextBox.Text>
</TextBox>

<TextBox x:Name="TextBox2">
    <TextBox.Text>
        <Binding Path="BoundProperty2" UpdateSourceTrigger="PropertyChanged">
            <Binding.ValidationRules>
                <local:EndsWithValidationRule MustEndWith=".abc" />
            </Binding.ValidationRules>
        </Binding>
    </TextBox.Text>
</TextBox>
person Lukazoid    schedule 23.01.2013