>我有一个视图,它绑定到具有许多属性的视图模型。某些属性直接绑定到文本框等控件。对于这些,我设置了一个验证模板,该模板显示带有角箭头的红色边框,该箭头在工具提示中显示属性的错误。
其他属性由响应单击按钮而打开的窗体设置。例如,我有标有"单击以编辑持续时间"的按钮,它会弹出表单以编辑StartDate
和EndDate
属性。该按钮绑定到视图模型中弹出窗体的命令。
视图模型实现了INotifyDataErrorInfo
因此对于直接绑定到属性的控件,我可以将错误消息附加到它们绑定到的属性并引发ErrorsChanged
事件。
我想要的是,如果未正确设置开始和结束日期,则会在按钮上应用红色边框和工具提示。将错误附加到StartDate
和EndDate
属性将不起作用,因为按钮未绑定到这些属性。
我在应用程序中做了同样的事情,其中需要完成额外的数据部分才能继续。我能够使按钮出现验证错误的方法是使用如下所示的标签:
<Button Grid.Column="1" Grid.Row="0" Content="{DynamicResource resEnterSecureInformation}" Width="200" Command="{Binding PrimaryApplicant.SecureInformation.OpenSecureInformationWindowCommand}" Tag="{Binding PrimaryApplicant.SecureInformationComplete, ValidatesOnDataErrors=True}"></Button>
我的 app.xaml 中还有一个样式,用于在设置错误时添加红色轮廓和工具提示:
<Style TargetType="Button">
<Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.Errors)/ErrorContent}"></Setter>
<Style.Triggers>
<Trigger Property="IsVisible" Value="True">
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<Border BorderBrush="Red" BorderThickness="1" >
<AdornedElementPlaceholder/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<AdornedElementPlaceholder/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
我这样做也是为了在按钮被禁用时不显示验证错误(无需向用户显示他们无法进入和修复的内容(
希望这有帮助