c#WPF确定DataGrid默认视觉验证是否有错误

c#WPF确定DataGrid默认视觉验证是否有错误,c#,wpf,validation,xaml,datagrid,C#,Wpf,Validation,Xaml,Datagrid,我是WPF的新手,我总是使用自定义ValidationRule类对各种UI控件进行验证,但是,当第一次使用DataGrid并将其与简单的DataTable绑定时,我发现DataGrid有一个非常好的默认验证,可以检测DataTable列的类型,如果单元格值不是预期的类型,则会给出一个可视错误。这对我来说已经足够了,我认为不需要创建自定义验证规则,因为默认的验证规则符合我的目的。但是,如果此DataGrid有任何错误,我需要禁用一个Submit按钮,因此我认为使用以下代码利用Validation.

我是WPF的新手,我总是使用自定义ValidationRule类对各种UI控件进行验证,但是,当第一次使用DataGrid并将其与简单的DataTable绑定时,我发现DataGrid有一个非常好的默认验证,可以检测DataTable列的类型,如果单元格值不是预期的类型,则会给出一个可视错误。这对我来说已经足够了,我认为不需要创建自定义验证规则,因为默认的验证规则符合我的目的。但是,如果此DataGrid有任何错误,我需要禁用一个Submit按钮,因此我认为使用以下代码利用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的默认视觉验证正在产生错误?或者我必须为此使用自定义验证规则吗?

您可以在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)。