C# 如何显示多个IDataErrorInfo';悬停单元格的WPF DataGridTextColumn上的工具提示中出现错误?
我能够为数据网格中的一个特定单元格显示验证错误,但如果存在多个验证错误,我不知道如何执行此操作。例如,我有十列,两个或更多单元格中存在验证错误 目前,我已经在App.xaml包含的单独文件中定义了一个样式作为ResourceDictionary 风格:C# 如何显示多个IDataErrorInfo';悬停单元格的WPF DataGridTextColumn上的工具提示中出现错误?,c#,datagrid,styles,idataerrorinfo,validationrule,C#,Datagrid,Styles,Idataerrorinfo,Validationrule,我能够为数据网格中的一个特定单元格显示验证错误,但如果存在多个验证错误,我不知道如何执行此操作。例如,我有十列,两个或更多单元格中存在验证错误 目前,我已经在App.xaml包含的单独文件中定义了一个样式作为ResourceDictionary 风格: <Style TargetType="{x:Type DataGridRow}"> <Setter Property="FontSize" Value="16"/> <Setter Property=
<Style TargetType="{x:Type DataGridRow}">
<Setter Property="FontSize" Value="16"/>
<Setter Property="FontFamily" Value="ArialMT"/>
<Setter Property="Height" Value="24"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="ValidationErrorTemplate">
<Setter.Value>
<ControlTemplate>
<Grid>
<Ellipse Width="12" Height="12" Fill="Red" Stroke="Black" StrokeThickness="0.5"/>
<TextBlock FontWeight="Bold" Padding="4,0,0,0" Margin="0" VerticalAlignment="Top" Foreground="White" Text="!" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<!--<DataTrigger Binding="{Binding Path=(Validation.HasError), RelativeSource={RelativeSource AncestorType=DataGridRow}}" Value="true" >-->
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="BorderBrush" Value="Red"/>
<Setter Property="IsEnabled" Value="True" />
<!--<Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.Errors).Currentitem.ErrorContent}"/>-->
<Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.Errors)[0].ErrorContent}"/>
</Trigger>
</Style.Triggers>
</Style>
<Style x:Key="cycleErrStyle" TargetType="{x:Type TextBlock}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=(Validation.HasError), RelativeSource={RelativeSource AncestorType=DataGridRow}}" Value="true" >
<Setter Property="Background" Value="Red" />
<Setter Property="Foreground" Value="White" />
</DataTrigger>
</Style.Triggers>
</Style>
我的验证类:
public class CycleValidationRule : ValidationRule
{
public override ValidationResult Validate(object value,
System.Globalization.CultureInfo cultureInfo)
{
BindingGroup group = (BindingGroup)value;
StringBuilder error = null;
foreach (var item in group.Items)
{
IDataErrorInfo info = item as IDataErrorInfo;
if (info != null)
{
if (!string.IsNullOrEmpty(info.Error))
{
if (error == null)
{
error = new StringBuilder();
}
error.Append((error.Length != 0 ? ", " : "") + info.Error);
}
}
}
if (error != null)
return new ValidationResult(false, error.ToString());
else
return new ValidationResult(true, "");
}
}
验证后,我希望故障单元格亮起,当悬停故障单元格时,工具提示中将仅显示该特定单元格/字段的验证错误的错误消息
更新2019-01-17:
必须有一种方法将
IDataErrorInfo
与ValidationRules
相结合,这样来自IDataErrorInfo
的错误消息才能进入ValidationRule
(目前运行良好)我可以将错误消息与ValidationRule
中的错误消息组合起来,并向GUI(WPF)提出此错误消息总和。。。但工具提示中仅显示来自IDataErrorInfo
的错误消息。IDataErrorInfo
不支持每个属性的多个验证错误。在.NET Framework 4.5中引入的较新接口不支持
这里有一个如何实现它的示例
您可以使用
ItemsControl
显示错误消息。请参阅我的答案以获取示例。错误在RawTag类中设置。尝试在循环单元格中插入字符串。
public class CycleValidationRule : ValidationRule
{
public override ValidationResult Validate(object value,
System.Globalization.CultureInfo cultureInfo)
{
BindingGroup group = (BindingGroup)value;
StringBuilder error = null;
foreach (var item in group.Items)
{
IDataErrorInfo info = item as IDataErrorInfo;
if (info != null)
{
if (!string.IsNullOrEmpty(info.Error))
{
if (error == null)
{
error = new StringBuilder();
}
error.Append((error.Length != 0 ? ", " : "") + info.Error);
}
}
}
if (error != null)
return new ValidationResult(false, error.ToString());
else
return new ValidationResult(true, "");
}
}