开源WPF-Samples-netframework学习(1)Data Binding——BindValidation

案例地址:GitHub - microsoft/WPF-Samples: Repository for WPF related samples

一、运行界面

 

 二、案例功能描述

绑定数据有效值;

知识点:

1、Target:设置访问键

2、<AdornedElementPlaceholder/>:在控件旁添加模板控件

3、Validation:提供支持数据验证的方法和附加属性。

4、Bingding.ValidationRules:绑定值有效规则

三、分析代码

1、Target : 设置访问键

 <Label Grid.Column="0" Grid.Row="1" FontSize="15" Margin="2"
           Target="{Binding ElementName=textBox1}">TextBox with _custom ErrorTemplate and ToolTip:</Label>

当按下Alt+C时,textBox1获得焦点

2、自定义错误标志控件模板

        <ControlTemplate x:Key="ValidationTemplate">
            <DockPanel>
                <TextBlock Foreground="Red" FontSize="20">!</TextBlock>
                <AdornedElementPlaceholder/> <!--- 指定该controlTemplate放在使用该controlTemplate控件的旁边--->
            </DockPanel>
        </ControlTemplate>

 3、TextBox的Style的触发器,实现当验证数据错误时,TextBox的tooltip的值为Validation.Errors中的第一个错误。

      静态类: public static class Validation,提供支持数据验证的方法和附加属性。

 

 <Style x:Key="TextBoxInError" TargetType="{x:Type TextBox}">
            <Style.Triggers>
                <Trigger Property="Validation.HasError" Value="true">
                    <Setter Property="ToolTip"
              Value="{Binding RelativeSource={x:Static RelativeSource.Self},
                              Path=(Validation.Errors)[0].ErrorContent}"
/>
                </Trigger>
            </Style.Triggers>
        </Style>

4、自定义绑定值有效规则,继承ValidationRule

 public class AgeRangeRule : ValidationRule
    {
        public int Min { get; set; }
        public int Max { get; set; }

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

            try
            {
                if (((string) value).Length > 0)
                    age = int.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 + ".");

            }
            return new ValidationResult(true, null);
        }
    }

5、TextBox设置附加属性Validation.ErrorTemplate、设置Style、绑定数据、确定绑定源更新的计时、设置绑定检查有效的规则

<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>
                        <local:AgeRangeRule Min="21" Max="130"/>
                    </Binding.ValidationRules>

                </Binding>
            </TextBox.Text>
        </TextBox>
 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值