Val*_*yev 56 validation wpf business-objects
我有一个WPF对话框,上面有几个文本框.文本框绑定到我的业务对象并附加了WPF验证规则.
问题是用户可以完美地单击"确定"按钮并关闭对话框,而无需将数据实际输入文本框.验证规则永远不会触发,因为用户甚至没有尝试将信息输入文本框.
是否可以强制进行验证检查并确定某些验证规则是否已损坏?
当用户试图关闭对话框并禁止他执行此操作时,如果任何验证规则被破坏,我将能够执行此操作.
谢谢.
Ken*_*ith 69
在3.5SP1/3.0SP2中,他们还向ValidationRule基础添加了一个新属性,即ValidatesOnTargetUpdated ="True".这将在绑定源对象时立即调用验证,而不是仅在更新目标控件时调用.这可能不是你想要的,但最初看到你需要解决的所有东西都不错.
像这样工作:
<TextBox.Text>
<Binding Path="Amount" StringFormat="C">
<Binding.ValidationRules>
<validation:RequiredValidationRule
ErrorMessage="The pledge amount is required."
ValidatesOnTargetUpdated="True" />
<validation:IsNumericValidationRule
ErrorMessage="The pledge amount must be numeric."
ValidationStep="ConvertedProposedValue"
ValidatesOnTargetUpdated="True" />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
Run Code Online (Sandbox Code Playgroud)
Rob*_*nee 63
我们的申请中也有这个问题.验证仅在绑定更新时触发,因此您必须手动更新它们.我们在Window的Loaded事件中执行此操作:
public void Window_Loaded(object sender, RoutedEventArgs e)
{
// we manually fire the bindings so we get the validation initially
txtName.GetBindingExpression(TextBox.TextProperty).UpdateSource();
txtCode.GetBindingExpression(TextBox.TextProperty).UpdateSource();
}
Run Code Online (Sandbox Code Playgroud)
这将使错误模板(红色轮廓)出现,并设置Validation.HasError属性,我们已触发OK按钮禁用:
<Button x:Name="btnOK" Content="OK" IsDefault="True" Click="btnOK_Click">
<Button.Style>
<Style TargetType="{x:Type Button}">
<Setter Property="IsEnabled" Value="false" />
<Style.Triggers>
<!-- Require the controls to be valid in order to press OK -->
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding ElementName=txtName, Path=(Validation.HasError)}" Value="false" />
<Condition Binding="{Binding ElementName=txtCode, Path=(Validation.HasError)}" Value="false" />
</MultiDataTrigger.Conditions>
<Setter Property="IsEnabled" Value="true" />
</MultiDataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
43436 次 |
| 最近记录: |