我正在使用IDataErrorInfo为某些值实现一些基本的逻辑验证。这似乎运作良好,我正在使用contentpresenter来显示结果:
<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>
当出现问题时,我收到一条漂亮的红色消息,并且正确突出显示了相关字段。但是,当发生这种情况时,我想禁用表单的保存按钮。这是我迄今为止尝试过的(没有成功):
<Button Content="Save" Click ="MyButton_Click"
IsEnabled="{Binding Converter={StaticResource ValidConverter}, ConverterParameter={Binding ElementName=MyElement, Path=(Validation.Errors).CurrentItem}}"/>
ValidConverter只是一个为null或空字符串返回true的转换器。
我也尝试了触发器,像这样(尝试了Trigger和DataTrigger):
<Button Content="Save" Click ="MyButton_Click"
<Button.Style>
<Style>
<Style.Triggers>
<Setter Property ="Button.IsEnabled" Value="True" />
<DataTrigger Binding ="{ Binding Path=(Validation.HasError)}" Value ="True">
<Setter Property ="Button.IsEnabled" Value="False" />
</ DataTrigger>
</Style.Triggers>
</Style>
</ Button.Style>
</ Button>
我已经找到了一些关于此的在线信息,据我所知,触发方法应该有效;但是,如果我使用Trigger,则没有任何反应,并且DataTrigger无法编译(错误MC1000:未知构建错误,'索引(基于零)必须大于或等于零且小于参数列表的大小)。< / p>
有谁能告诉我为什么这不起作用,我在这里做错了什么?
答案 0 :(得分:0)
嗯......我正在反过来......这是一个类似的按钮,但它基于几个需要验证的TextBox
和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>
尝试将<Setter Property ="Button.IsEnabled" Value="True" />
置于<Style.Triggers>
答案 1 :(得分:0)
问题在于默认值:
<Style.Triggers>
<DataTrigger Binding ="{ Binding Path=(Validation.HasError)}" Value ="True">
<Setter Property ="Button.IsEnabled" Value="False" />
</ DataTrigger>
</Style.Triggers>
工作正常。正如@Shoe指出的那样 - 问题中有一个拼写错误 - 现在已经纠正了。