【发布时间】:2010-10-23 17:30:12
【问题描述】:
我目前在应用程序中使用here 列出的验证码。我想有选择地验证一个页面。我的意思是:我有一个附有验证规则的数据绑定表单。我还有一个复选框,选中后会禁用和清除几个绑定文本框的值。我可以在这些文本框上设置一个属性来告诉验证引擎在验证时不要包含这些吗?
【问题讨论】:
标签: c# .net wpf validation
我目前在应用程序中使用here 列出的验证码。我想有选择地验证一个页面。我的意思是:我有一个附有验证规则的数据绑定表单。我还有一个复选框,选中后会禁用和清除几个绑定文本框的值。我可以在这些文本框上设置一个属性来告诉验证引擎在验证时不要包含这些吗?
【问题讨论】:
标签: c# .net wpf validation
您可能拥有切换绑定的触发器。这意味着 Setter-s 将使用具有不同验证规则的另一个绑定重新绑定属性。
但这只有(?)所有这些验证规则都在 ControlTemplate 或 DataTemplate 中时才有效。
【讨论】:
也许如果您为 Validator 类编写了一个附加属性,并在您的 IsValid 方法中首先检查它。
static class Validator
{
public static readonly DependencyProperty SkipValidationProperty =
DependencyProperty.RegisterAttached("SkipValidation", typeof(bool), typeof(Validator),
new UIPropertyMetadata(false));
public static bool GetSkipValidation(DependencyObject obj)
{
return (bool)obj.GetValue(SkipValidationProperty);
}
public static void SetSkipValidation(DependencyObject obj, bool value)
{
obj.SetValue(SkipValidationProperty, value);
}
public static bool IsValid(DependencyObject parent)
{
if (Validator.GetSkipValidation(parent)) return true;
//Rest of the validation code
}
}
然后你可以做一些简单的事情:
<StackPanel>
<TextBox x:Name="txt" local:Validator.SkipValidation="{Binding IsChecked, ElementName=cbx}" />
<CheckBox x:Name="cbx" >Skip Validate?</CheckBox>
</StackPanel>
【讨论】: