如何在Windows应用程序中的WPF应用程序中进行单独验证

时间:2013-05-29 02:13:26

标签: c# wpf validation

我希望在C#中使用我自己的自定义代码在单独的xaml定义中进行验证,以生成Windows窗体。关于使用自定义验证进行验证的代码,我一直read the resource

 <Window  xmlns:validators="clr-namespace:MyValidators" [...]/>

然后这是带有自定义代码的xaml定义

  <TextBox x:Name="textAge">
    <TextBox.Text>
        <Binding Path="Name">
            <Binding.ValidationRules>
              <validators:StringRangeValidationRule 
                 MinimumLength="1" 
                 ErrorMessage="Age is required." />
            </Binding.ValidationRules>
        </Binding>
    </TextBox.Text>
</TextBox>

但我希望验证变得像这样

<TextBox x:Name="textAge" Text="{Binding Path=Age}"/>

在单独的文件中,我想定义我自己的验证,例如Validation.xml

<validation:StringrangeValidationRule target="textAge"  MinimumLength="1" errorMessage="Age is required" />

如何实现这一点我有很多具有不同验证规则的textBox。我不想在一个地方混淆文本框和验证的定义,这会让我难以阅读代码......

任何帮助问候......

2 个答案:

答案 0 :(得分:1)

您可以将绑定和验证规则置于键控样式中,并将其指定给文本框。这是一个例子

<Window.Resources>
    <Style x:Key="SomeNameTextBoxStyle" TargetType="{x:Type TextBox}">
        <Style.Setters>
            <Setter Property="Text">
                <Setter.Value>
                    <Binding Path="SomeName">
                        <Binding.ValidationRules>
                            <validators:StringRangeValidationRule 
                                 MinimumLength="1" 
                                 ErrorMessage="SomeName is required." />
                        </Binding.ValidationRules>
                    </Binding>
                </Setter.Value>
            </Setter>
        </Style.Setters>
    </Style>
</Window.Resources>

将此样式指定给文本框

<TextBox Style="{StaticResource SomeNameTextBoxStyle}"/>

我认为这应该有效。但是我建议你也看看IDataErrorInfo接口,它也提供了一种验证属性的方法。

答案 1 :(得分:0)

为什么不使用企业库验证应用程序块。然后,您可以通过属性或配置(在单独的非编译XML文件中)指定对象属性的验证。

你的XAML看起来像这样:

<TextBox Text="{Binding SomeName, ValidatesOnDataErrors=True}"/>

今年4月发布了new version of Enterprise Library(第6版)。

微软的这些hands-on labs给出了如何让你入门的一个很好的演练(这是为了早期版本,但原则是相同的)。