gpt4 book ai didi

c# WPF判断DataGrid默认可视化验证是否有错

转载 作者:太空宇宙 更新时间:2023-11-03 15:34:26 24 4
gpt4 key购买 nike

我是WPF的新手,一直以来都是使用自定义的ValidationRule类对各种UI控件进行校验,但是第一次使用DataGrid绑定(bind)一个简单的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 的默认视觉验证正在产生错误?还是我必须为此目的使用自定义验证规则?

最佳答案

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

关于c# WPF判断DataGrid默认可视化验证是否有错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32335463/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com