c#WPF确定DataGrid默认视觉验证是否有错误
我是WPF的新手,我总是使用自定义ValidationRule类对各种UI控件进行验证,但是,当第一次使用DataGrid并将其与简单的DataTable绑定时,我发现DataGrid有一个非常好的默认验证,可以检测DataTable列的类型,如果单元格值不是预期的类型,则会给出一个可视错误。这对我来说已经足够了,我认为不需要创建自定义验证规则,因为默认的验证规则符合我的目的。但是,如果此DataGrid有任何错误,我需要禁用一个Submit按钮,因此我认为使用以下代码利用Validation.HasError属性会很容易:c#WPF确定DataGrid默认视觉验证是否有错误,c#,wpf,validation,xaml,datagrid,C#,Wpf,Validation,Xaml,Datagrid,我是WPF的新手,我总是使用自定义ValidationRule类对各种UI控件进行验证,但是,当第一次使用DataGrid并将其与简单的DataTable绑定时,我发现DataGrid有一个非常好的默认验证,可以检测DataTable列的类型,如果单元格值不是预期的类型,则会给出一个可视错误。这对我来说已经足够了,我认为不需要创建自定义验证规则,因为默认的验证规则符合我的目的。但是,如果此DataGrid有任何错误,我需要禁用一个Submit按钮,因此我认为使用以下代码利用Validation.
<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的默认视觉验证正在产生错误?或者我必须为此使用自定义验证规则吗?您可以在Ap.xaml文件上创建全局验证。因此,控件将有一个红色星号和错误消息作为工具提示。项目的任何控件都可以使用相同的验证 在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}" />
*
您的目标是.Net的哪个版本?它是最新的2015 community2015社区编辑器。您的目标是.Net的哪个版本?因为编辑器可以使用.NET2.0、3、3.5、4、4.5、4.51、4.52和4.6项目。不同级别的.Net具有不同的Xaml特性。顺便说一句,我将创建一个小的测试网格/数据/绑定,演示您看到的内容并发布它。有不同的方法来处理验证,但不一定清楚您使用的方法。谢谢您的回复。我已发现验证的原因。hasError始终为false。这是因为错误仅在datagrid单元中,而不在datagrid本身中。错误不会从子(单元格)传输到父(datagrid)。