使用 WPF + Catel 在标签上触发验证
Trigger validation on a label with WPF + Catel
我正在尝试通过 属性="Validation.ErrorTemplate" 对 WPF 标签进行样式验证。问题是,即使是标准验证也不会触发。我的 objective 正在将文本的前景更改为红色。
<Label Content="{Binding LabelConformidadValidadion, UpdateSourceTrigger=PropertyChanged, NotifyOnValidationError=True}"></Label>
我使用的是 CATEL 4.5.2,我使用以下代码设置验证。
protected override void ValidateFields(List<IFieldValidationResult> validationResults)
{
if (Peso!=null && !Peso.Peso_Caliente.HasValue)
validationResults.Add(FieldValidationResult.CreateErrorWithTag(Peso_CalienteProperty,"No se ha capturado el peso", "Captura_PesoCalienteCanExecute"));
if (Peso!=null && !Peso.IC.HasValue)
validationResults.Add(FieldValidationResult.CreateErrorWithTag(LabelConformidadValidadion, "No se ha capturado el indicador IC", "Captura_PesoCalienteCanExecute"));
}
视图模型已验证,但标签周围的标准红框从未出现。我确实发现的一件事是,如果我正在调试并打开和关闭标签上的 NotifyOnValidationError=True 属性,标签会显示通常的红色框。
问题是我将规则附加到字段而不是 PropertyData。
完整答案是这样
XAML.
<Label Content="{Binding LabelConformidadValidadion, UpdateSourceTrigger=PropertyChanged, NotifyOnValidationError=True}">
<Label.Style>
<Style TargetType="Label">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="Foreground" Value="Red"></Setter>
</Trigger>
</Style.Triggers>
</Style>
</Label.Style>
</Label>
C#:
public string LabelConformidadValidadion
{
get { return GetValue<string>(LabelConformidadValidadionProperty); }
set { SetValue(LabelConformidadValidadionProperty,value); }
}
public static readonly PropertyData LabelConformidadValidadionProperty = RegisterProperty("LabelConformidadValidadion", typeof(string), null);
...
protected override void ValidateFields(List<IFieldValidationResult> validationResults)
{
if (Peso!=null && !Peso.Peso_Caliente.HasValue)
validationResults.Add(FieldValidationResult.CreateErrorWithTag(Peso_CalienteProperty,"No se ha capturado el peso", "Captura_PesoCalienteCanExecute"));
if (Peso!=null && !Peso.IC.HasValue)
validationResults.Add(FieldValidationResult.CreateError(LabelConformidadValidadionProperty, "No se ha capturado el indicador IC"));
}
我正在尝试通过 属性="Validation.ErrorTemplate" 对 WPF 标签进行样式验证。问题是,即使是标准验证也不会触发。我的 objective 正在将文本的前景更改为红色。
<Label Content="{Binding LabelConformidadValidadion, UpdateSourceTrigger=PropertyChanged, NotifyOnValidationError=True}"></Label>
我使用的是 CATEL 4.5.2,我使用以下代码设置验证。
protected override void ValidateFields(List<IFieldValidationResult> validationResults)
{
if (Peso!=null && !Peso.Peso_Caliente.HasValue)
validationResults.Add(FieldValidationResult.CreateErrorWithTag(Peso_CalienteProperty,"No se ha capturado el peso", "Captura_PesoCalienteCanExecute"));
if (Peso!=null && !Peso.IC.HasValue)
validationResults.Add(FieldValidationResult.CreateErrorWithTag(LabelConformidadValidadion, "No se ha capturado el indicador IC", "Captura_PesoCalienteCanExecute"));
}
视图模型已验证,但标签周围的标准红框从未出现。我确实发现的一件事是,如果我正在调试并打开和关闭标签上的 NotifyOnValidationError=True 属性,标签会显示通常的红色框。
问题是我将规则附加到字段而不是 PropertyData。
完整答案是这样
XAML.
<Label Content="{Binding LabelConformidadValidadion, UpdateSourceTrigger=PropertyChanged, NotifyOnValidationError=True}">
<Label.Style>
<Style TargetType="Label">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="Foreground" Value="Red"></Setter>
</Trigger>
</Style.Triggers>
</Style>
</Label.Style>
</Label>
C#:
public string LabelConformidadValidadion
{
get { return GetValue<string>(LabelConformidadValidadionProperty); }
set { SetValue(LabelConformidadValidadionProperty,value); }
}
public static readonly PropertyData LabelConformidadValidadionProperty = RegisterProperty("LabelConformidadValidadion", typeof(string), null);
...
protected override void ValidateFields(List<IFieldValidationResult> validationResults)
{
if (Peso!=null && !Peso.Peso_Caliente.HasValue)
validationResults.Add(FieldValidationResult.CreateErrorWithTag(Peso_CalienteProperty,"No se ha capturado el peso", "Captura_PesoCalienteCanExecute"));
if (Peso!=null && !Peso.IC.HasValue)
validationResults.Add(FieldValidationResult.CreateError(LabelConformidadValidadionProperty, "No se ha capturado el indicador IC"));
}