0

我想用我自己的 C# 自定义代码在单独的 xaml 定义中进行验证,以制作 windows 表单。我已经阅读了有关带有自定义验证的验证这样的代码的资源

 <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" />

我如何做到这一点我有这么多具有​​不同验证规则的文本框。我不想在一个地方混淆文本框和验证的定义,这会使我难以阅读代码......

任何帮助问候..

4

2 回答 2

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 接口,该接口还提供了一种验证属性的方法。

于 2013-05-29T03:03:56.470 回答
0

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

你的 XAML 然后看起来像这样:

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

有一个新版本的 Enterprise Library(版本 6)于今年 4 月发布。

这些来自 Microsoft 的动手实验室很好地介绍了如何入门(它适用于早期版本,但原理相同)。

于 2013-05-29T11:00:31.010 回答