Wpf 使用IDataErrorInfo进行验证
我正在使用IDataErrorInfo为一些值实现一些基本的逻辑验证。这似乎很有效,我正在使用contentpresenter来显示结果:Wpf 使用IDataErrorInfo进行验证,wpf,binding,idataerrorinfo,Wpf,Binding,Idataerrorinfo,我正在使用IDataErrorInfo为一些值实现一些基本的逻辑验证。这似乎很有效,我正在使用contentpresenter来显示结果: <ContentPresenter Content="{ Binding ElementName =MyElement, Path=(Validation.Errors).CurrentItem}" HorizontalAlignment ="Left"> <Conten
<ContentPresenter Content="{ Binding ElementName =MyElement, Path=(Validation.Errors).CurrentItem}"
HorizontalAlignment ="Left">
<ContentPresenter.ContentTemplate>
<DataTemplate>
<TextBlock Foreground ="Red" FontStyle="Italic" Text="{ Binding Path =ErrorContent}" />
</DataTemplate>
</ContentPresenter.ContentTemplate>
</ContentPresenter>
当出现问题时,我会收到一条漂亮的红色消息,并且该字段被正确地高亮显示。但是,当这种情况发生时,我想禁用表单的保存按钮。以下是我迄今为止所做的尝试(没有成功):
ValidConverter只是一个为null或空字符串返回true的转换器
我还尝试了触发器,如下所示(同时尝试了触发器和数据触发器):
嗯。。。我正以另一种方式来做。。。这里有一个类似的按钮,但它基于对需要验证的几个TextBox
s和ComboBox
的几个验证
因此,我将在默认情况下将其设置为false,当所有验证错误都为false时,将其设置为true
<Button x:Name="Btn_Insert"
Command="{Binding Insert_Command}"
IsDefault="True"
>
<Button.Style>
<Style TargetType="Button">
<Setter Property="IsEnabled" Value="False"/>
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=(Validation.HasError),
ElementName=txtbx_1}" Value="False"/>
<Condition Binding="{Binding Path=(Validation.HasError),
ElementName=cmb_1}" Value="False"/>
<Condition Binding="{Binding Path=(Validation.HasError),
ElementName=txtbx_2}" Value="False"/>
<Condition Binding="{Binding Path=(Validation.HasError),
ElementName=txtbx_3}" Value="False"/>
</MultiDataTrigger.Conditions>
<Setter Property="IsEnabled" Value="True"/>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
还可以尝试将您的
放在上方。问题在于默认设置:
<Style.Triggers>
<DataTrigger Binding ="{ Binding Path=(Validation.HasError)}" Value ="True">
<Setter Property ="Button.IsEnabled" Value="False" />
</ DataTrigger>
</Style.Triggers>
很好。正如@Shoe所指出的,问题中有一个输入错误,现在已经更正。{code>{Binding Path={Validation.HasError}}
应该是{Binding Path=(Validation.HasError)}
输入错误?是-输入错误。。。修复了现在只是要更新的答案
<Button x:Name="Btn_Insert"
Command="{Binding Insert_Command}"
IsDefault="True"
>
<Button.Style>
<Style TargetType="Button">
<Setter Property="IsEnabled" Value="False"/>
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=(Validation.HasError),
ElementName=txtbx_1}" Value="False"/>
<Condition Binding="{Binding Path=(Validation.HasError),
ElementName=cmb_1}" Value="False"/>
<Condition Binding="{Binding Path=(Validation.HasError),
ElementName=txtbx_2}" Value="False"/>
<Condition Binding="{Binding Path=(Validation.HasError),
ElementName=txtbx_3}" Value="False"/>
</MultiDataTrigger.Conditions>
<Setter Property="IsEnabled" Value="True"/>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
<Style.Triggers>
<DataTrigger Binding ="{ Binding Path=(Validation.HasError)}" Value ="True">
<Setter Property ="Button.IsEnabled" Value="False" />
</ DataTrigger>
</Style.Triggers>