- <Grid>
- <StackPanel>
- <TextBox x:Name="textBox1" Margin="5"/>
- <Slider x:Name="slider1" Minimum="-10" Maximum="110" Margin="5"/>
- </StackPanel>
- </Grid>
2. C#
- public partial class MainWindow : Window
- {
- public MainWindow()
- {
- InitializeComponent();
- Binding binding = new Binding("Value") { Source = slider1 };//绑定到slider的Value属性
- /*
- * UpdateSourceTrigger属性控制绑定源更新的执行时间,默认为LostFocus
- *
- * LostFocus: 当TextBox失去焦点时,TextBox输入的内容才会更新源(slider)
- * PropertyChanged: TextBox输入时,TextBox输入的内容就会更新源(slider)
- */
- binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
- /* 实现数据检测,定义继承ValidationRule的DataValidChcker类,并实例化 */
- DataValidChcker dataChecker = new DataValidChcker();//绑定“目标”数据有效性检测,TextBox输入数据有效性
- /* 可选,需要检测“源”时设置为true */
- dataChecker.ValidatesOnTargetUpdated = true;//绑定“源”数据的有效性检测,xaml设置最小值为-10,最大值为110。不在[0, 100]范围将认为无效
- binding.ValidationRules.Add(dataChecker);//Binding有多个数据校验条件
- /* 事件1: 当数据无效时,获取无效信息时设置为true */
- binding.NotifyOnValidationError = true;//当数据校验为无效时,发出错误事件
- textBox1.SetBinding(TextBox.TextProperty, binding);
- /* 事件2: 当事件1为true时使用 */
- textBox1.AddHandler(Validation.ErrorEvent, new RoutedEventHandler(DataValidCheckErrorHandler));//当数据校验为无效时,处理事件
- }
- void DataValidCheckErrorHandler(object sender, RoutedEventArgs arg)
- {
- int errorCount = 0;
- ReadOnlyObservableCollection<ValidationError> errors = Validation.GetErrors(textBox1);
- if (null == errors)
- {
- textBox1.ToolTip = "Unknow";
- return;
- }
- errorCount = errors.Count;
- if (errorCount > 0)
- {
- textBox1.ToolTip = errors[0].ErrorContent.ToString();
- }
- else
- {
- textBox1.ToolTip = "valid data";
- }
- }
- }
- public class DataValidChcker : ValidationRule
- {
- public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
- {
- double data = 0.0;
- if (double.TryParse(value.ToString(), out data))
- {
- if (data >= 0 && data <= 100)//有效范围: [0, 100]
- {
- return new ValidationResult(true, "data valid");//有效
- }
- }
- return new ValidationResult(false, "data invalid");//无效
- }
- }