gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 14:38:19 26 4
gpt4 key购买 nike

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com