【问题标题】:c# WPF determine if DataGrid default visual validation has errorsc# WPF判断DataGrid默认可视化验证是否有错误
【发布时间】:2015-11-26 22:01:09
【问题描述】:

我是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>

但不幸的是,无论我在运行时的数据网格单元格中输入什么值,Validation.HasError 似乎总是 False。默认的视觉验证工作正常,当输入不正确的值时,单元格会出现红色边框,但是,不会发送任何通知表明 dataGrid 有错误。

有没有什么方法可以在 XAML 中检测到 dataGrid 的默认可视化验证是否产生了错误?还是我必须为此使用自定义验证规则?

【问题讨论】:

  • 您的目标是哪个版本的 .Net?
  • 这是2015年最新的一个社区
  • 2015 社区是一名编辑。您的目标是什么版本的 .Net?编辑器可以使用 .Net 2.0、3、3.5、4、4.5、4.51、4.52 和 4.6 项目。不同级别的 .Net 具有不同的 Xaml 特性。顺便说一句,我会创建一个小的测试网格/数据/绑定来演示您所看到的并发布它。有不同的方法来处理验证,它不一定清楚你正在使用的那个。
  • 感谢您的回复。我发现了 Validation.hasError 总是错误的原因。这是因为错误仅在数据网格单元格中,而不在数据网格本身中。错误不会从子(单元格)转移到父(数据网格)。

标签: c# wpf validation xaml datagrid


【解决方案1】:

您可以在 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}" />

【讨论】:

    猜你喜欢
    • 2011-06-29
    • 2014-09-02
    • 2022-10-12
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多