我是WPF的新手,我总是使用自定义ValidationRule类对各种UI控件进行验证,但是,当第一次使用DataGrid并将其与简单的DataTable绑定时,我发现DataGrid有一个非常好的默认验证,用于检测DataTable列的类型,如果单元格值与预期类型不同,则会出现可视错误。这对我来说已经足够了,我认为不需要创建自定义验证规则,因为默认验证规则符合我的目的。但是,如果此DataGrid有任何错误,我需要禁用“提交”按钮,因此我认为使用以下代码可以轻松利用Validation.HasError属性:
<Button x:Name="btnSubmit" Content="Submit">
<Button.Style>
<Style TargetType="Button">
<Setter Property="IsEnabled" Value="False"/>
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=(Validation.HasError),ElementName=dataGrid}" Value="False"/>
</MultiDataTrigger.Conditions>
<Setter Property="IsEnabled" Value="True"/>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
但不幸的是,无论我在运行时的datagrid单元格中输入的值如何,Validation.HasError似乎总是为False。默认的可视验证工作正常,当输入的值不正确时,单元格会出现红色边框,但是,没有通知发出来自dataGrid的错误。
有没有办法在XAML中检测dataGrid的默认可视验证是否产生错误?或者我是否必须为此目的使用自定义验证规则?
答案 0 :(得分:0)
您可以在Ap.xaml文件上创建全局验证。所以你的控件将有一个红色的星号,错误信息为Tooltip。对项目的任何控制都可以使用相同的验证。
在App.xaml文件中:
<Style x:Key="AsteriskTemplate" TargetType="Control">
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<DockPanel LastChildFill="True">
<TextBlock DockPanel.Dock="Right"
Foreground="Red"
FontSize="14pt"
Margin="-15,0,0,0" FontWeight="Bold">*
</TextBlock>
<Border>
<AdornedElementPlaceholder Name="myControl"/>
</Border>
</DockPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip"
Value="{Binding RelativeSource={x:Static RelativeSource.Self},
Path=(Validation.Errors).CurrentItem.ErrorContent}"/>
</Trigger>
</Style.Triggers>
</Style>
<Style TargetType="DataGrid" BasedOn="{StaticResource AsteriskTemplate}" />