3

如何为文本框实现绑定验证?

<TextBox Name="textBox1" Width="50" FontSize="15"
     Validation.ErrorTemplate="{StaticResource validationTemplate}"
     Style="{StaticResource textBoxInError}"
     Grid.Row="1" Grid.Column="1" Margin="2">
    <TextBox.Text>
        <Binding Path="Age" Source="{StaticResource ods}"
         UpdateSourceTrigger="PropertyChanged" >
            <Binding.ValidationRules>
          // *** What should I write here? ***     
            </Binding.ValidationRules>
        </Binding>
    </TextBox.Text>
</TextBox>

我应该在验证规则中写什么?

4

2 回答 2

3

下面的示例显示了 AgeRangeRule 的实现,它继承自 ValidationRule 并覆盖了 Validate 方法。对值调用 Int32.Parse() 方法以确保它不包含任何无效字符。Validate 方法返回一个 ValidationResult,根据解析过程中是否捕获到异常以及年龄值是否超出上下限来指示该值是否有效。

public class AgeRangeRule : ValidationRule
{
    private int _min;
    private int _max;

    public AgeRangeRule()
    {
    }

    public int Min
    {
        get { return _min; }
        set { _min = value; }
    }

    public int Max
    {
        get { return _max; }
        set { _max = value; }
    }

    public override ValidationResult Validate(object value, CultureInfo cultureInfo)
    {
        int age = 0;

        try
        {
            if (((string)value).Length > 0)
                age = Int32.Parse((String)value);
        }
        catch (Exception e)
        {
            return new ValidationResult(false, "Illegal characters or " + e.Message);
        }

        if ((age < Min) || (age > Max))
        {
            return new ValidationResult(false,
              "Please enter an age in the range: " + Min + " - " + Max + ".");
        }
        else
        {
            return new ValidationResult(true, null);
        }
    }
}
于 2013-10-09T09:15:56.230 回答
2

为了扩展 Cornel 的答案,这里是您将与他的示例代码一起使用的相关 XAML:

<TextBox Name="textBox1" Width="50" FontSize="15"
     Validation.ErrorTemplate="{StaticResource validationTemplate}"
     Style="{StaticResource textBoxInError}"
     Grid.Row="1" Grid.Column="1" Margin="2"> <TextBox.Text>
<Binding Path="Age" Source="{StaticResource ods}"
         UpdateSourceTrigger="PropertyChanged" >
  <Binding.ValidationRules>
    <c:AgeRangeRule Min="21" Max="130"/>
  </Binding.ValidationRules>
</Binding></TextBox.Text></TextBox>

因此,总而言之,您创建自定义验证类,在 XAML 代码中引用它,然后使用初始化的必要属性实现它。

MSDN 示例

于 2013-10-09T09:26:06.587 回答