Binding的数据校验

Binding的ValidationRules 可以每个Binding 设置多个数据校验条件。

下面创建一个规则,必须继承抽象类 ValidationRule,下面规则(0~100)

public class RangeValidationRule : ValidationRule
    {
        public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
        {
            double d = 0;

            if (double.TryParse(value.ToString(), out d))
            {
                if (d >= 0 && d <= 100)
                {
                    return new ValidationResult(true, null);
                }
            }

            return new ValidationResult(false, "0~100");
        }
    }

 UI

<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication2"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <TextBox x:Name="txt"  Margin="5,5,5,265"/>
        <Slider x:Name="slider1" Minimum="0" Maximum="100" Value="50" Margin="0,191,0,101" />
    </Grid>
</Window>

 后台绑定

/// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {

            InitializeComponent();
            Init();
        }

        public void Init()
        {
            Binding binding = new Binding("Value") { Source = slider1 };
            binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;

            RangeValidationRule rule = new RangeValidationRule();
            rule.ValidatesOnTargetUpdated = true;     //默认只校验target,设置true,也校验source
            binding.ValidationRules.Add(rule);
            binding.NotifyOnValidationError = true; //错误是发出信号

            txt.SetBinding(TextBox.TextProperty, binding);
            txt.AddHandler(Validation.ErrorEvent,new RoutedEventHandler(this.ValidationError)); //监听路由事件
        }


        void ValidationError(object sender,RoutedEventArgs e)
        {

            if(Validation.GetErrors(txt).Count()>0)
            {
                this.txt.ToolTip = Validation.GetErrors(this.txt)[0].ErrorContent.ToString();
            }
        }
    }

运行图(错误显示到提示框,而且无法更新到source)

posted @ 2012-10-19 22:20  Mr.Lin_♪  阅读(204)  评论(0)    收藏  举报