【发布时间】:2013-11-27 11:53:17
【问题描述】:
我正在使用 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>
我在网上找到了一些关于此的信息,据我所知,触发方法应该可以工作;但是,如果我使用触发器,则不会发生任何事情,并且 DataTrigger 不会编译(错误 MC1000:未知构建错误,'索引(基于零)必须大于或等于零且小于参数列表的大小)。
谁能告诉我为什么这不起作用,以及我在这里做错了什么?
【问题讨论】:
-
{Binding Path={ Validation.HasError}}应该是{ Binding Path=(Validation.HasError)}错字? -
是的 - 错字...现在已修复,只是要更新答案
标签: wpf binding idataerrorinfo