XAML:
<文本框名称="textboxMin">
<文本框.文本>
<绑定(bind)路径="最大">
绑定(bind)>
文本框>
代码:
无效按钮OK_Click(对象发送者,RoutedEventArgs e)
{
//这里需要知道textboxMin验证是否OK
//textboxMin. ???
//我需要这样写:
//if ( textboxMin.Validation.HasErrors )
// 返回;
}
如果至少有一个对话框控件未通过验证 - 在 XAML 中,使用绑定(bind),如果知道如何禁用“确定”按钮也很高兴。有了这种方式,我不需要检查代码中的验证状态。
最佳答案
Validation.HasError 是一个附加属性,因此您可以像这样检查它的 textboxMin
void buttonOK_Click(object sender, RoutedEventArgs e)
{
if (Validation.GetHasError(textboxMin) == true)
return;
}
要在后面的代码中运行 TextProperty 的所有 ValidationRules,您可以获得 BindingExpression 并调用 UpdateSource
BindingExpression be = textboxMin.GetBindingExpression(TextBox.TextProperty);
be.UpdateSource();
更新
如果发生任何验证,将需要一些步骤来实现绑定(bind)以禁用按钮。
首先,确保所有绑定(bind)都添加 NotifyOnValidationError="True"。例子
<TextBox Name="textboxMin">
<TextBox.Text>
<Binding Path="Max" NotifyOnValidationError="True">
<Binding.ValidationRules>
<local:IntValidator/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
然后我们将一个 EventHandler 连接到 Window 中的 Validation.Error 事件。
<Window ...
Validation.Error="Window_Error">
在后面的代码中,我们在 observablecollection 中添加和删除验证错误,因为它们来来去去
public ObservableCollection<ValidationError> ValidationErrors { get; private set; }
private void Window_Error(object sender, ValidationErrorEventArgs e)
{
if (e.Action == ValidationErrorEventAction.Added)
{
ValidationErrors.Add(e.Error);
}
else
{
ValidationErrors.Remove(e.Error);
}
}
然后我们可以像这样将 Button 的 IsEnabled 绑定(bind)到 ValidationErrors.Count
<Button ...>
<Button.Style>
<Style TargetType="Button">
<Setter Property="IsEnabled" Value="False"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ValidationErrors.Count}" Value="0">
<Setter Property="IsEnabled" Value="True"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
关于wpf - 从代码访问 WPF 控件验证规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4274322/