wpf - 从代码访问 WPF 控件验证规则

标签 wpf validation binding

XAML:

<文本框名称="textboxMin">
<文本框.文本>
<绑定(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/

相关文章:

c# - 从资源或站点获取 XML

c# - PRISM中的复合 View 导航

WPF 子控件的鼠标悬停触发效果

javascript - 如何检查选择选项中的重复值

wpf - 不绑定(bind)图像源的值转换器

WPF:按钮单击+双击问题

php - 为 zf2 实现密码验证器

ruby-on-rails - 如何在 Rails 中将自定义错误返回到我的表单?

javascript - SAPUI5绑定(bind)问题: list item links maintained in json file do not work

wpf - TextBlock 触发器而不是使用转换器