none
关于ValidationRules的问题,后台写了个ValidadationRule 如何和提交事件关联? RRS feed

  • 问题

  • 如题,网上看了些validation例子,错误的时候返回validationresult false,可以让输入框变红等,但是貌似不能影响界面上的按钮?

    如果我想在验证不通过的时候某个按钮disable这种效果怎么做?有代码给点没?

    2011年10月25日 6:19

答案

  • 你好,

    1.一个简单的方法是把按钮的IsEnabled属性绑定到有Binding Validation的控件的Validation.HasError属性上就可以了。这样有验证失败的时候按钮就会被禁用。

    2.你可以给你自定义的ValidationRule添加一些属性,这样你就可以在XAML中创建的时候给这些属性赋值,来满足不同的需求。

    下面是一个简单的例子。

        <StackPanel>
            <TextBox Name="tbAge">
                <TextBox.Text>
                    <Binding Path="Age">
                        <Binding.ValidationRules>
                            <local:IntRangeValidtionRule Min="15" Max="25"/>
                        </Binding.ValidationRules>
                    </Binding>
                </TextBox.Text>
            </TextBox>
            <Button IsEnabled="{Binding ElementName=tbAge, Path=(Validation.HasError)}"/>
        </StackPanel>
    


    Min Zhu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 a013strife 2011年10月27日 6:53
    2011年10月27日 4:04
    版主
  • 你好,

    ValidationRule是为数据绑定服务的。如果不使用数据绑定,那么ValidationRule就派不上用处了。

    不过一般在WPF应用程序中,需要利用的数据都会进行数据绑定的。这样可以实现数据驱动UI。


    Min Zhu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 a013strife 2011年10月27日 6:53
    2011年10月27日 6:47
    版主

全部回复

  • 还有一点,验证规则可能会随当前选中的项目不同,这个效果怎么做呢?并不是写死的,例如,有三项内容选中第一项输入框的范围0到100,第二项10-1000,第三项100-10000,但是输入框同一个,提交按钮同一个,这时的validation怎么写呢?需要有输入参数,参数怎么加呢?
    2011年10月25日 6:22
  • 你好,

    1.一个简单的方法是把按钮的IsEnabled属性绑定到有Binding Validation的控件的Validation.HasError属性上就可以了。这样有验证失败的时候按钮就会被禁用。

    2.你可以给你自定义的ValidationRule添加一些属性,这样你就可以在XAML中创建的时候给这些属性赋值,来满足不同的需求。

    下面是一个简单的例子。

        <StackPanel>
            <TextBox Name="tbAge">
                <TextBox.Text>
                    <Binding Path="Age">
                        <Binding.ValidationRules>
                            <local:IntRangeValidtionRule Min="15" Max="25"/>
                        </Binding.ValidationRules>
                    </Binding>
                </TextBox.Text>
            </TextBox>
            <Button IsEnabled="{Binding ElementName=tbAge, Path=(Validation.HasError)}"/>
        </StackPanel>
    


    Min Zhu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 a013strife 2011年10月27日 6:53
    2011年10月27日 4:04
    版主
  • 斑竹的方法可以用,但是我发现需要验证的textbox不是帮定的值,而是根据页面上选中某值判断的,并不是帮定显示,好像这种情况不太好用validationRules的方法吧?我自己用了winform上用过的判断,自己写代码的方式搞定了,新写法好像这种情况用不上是不是这样?
    2011年10月27日 5:45
  • 你好,

    ValidationRule是为数据绑定服务的。如果不使用数据绑定,那么ValidationRule就派不上用处了。

    不过一般在WPF应用程序中,需要利用的数据都会进行数据绑定的。这样可以实现数据驱动UI。


    Min Zhu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 a013strife 2011年10月27日 6:53
    2011年10月27日 6:47
    版主