我希望在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。我不想在一个地方混淆文本框和验证的定义,这会让我难以阅读代码......
任何帮助问候......
答案 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给出了如何让你入门的一个很好的演练(这是为了早期版本,但原则是相同的)。