C# 使用WPF+;在标签上触发验证;卡特尔

C# 使用WPF+;在标签上触发验证;卡特尔,c#,wpf,validation,catel,C#,Wpf,Validation,Catel,我试图通过Property=“validation.ErrorTemplate”在WPF标签上设置验证样式。问题是,即使是标准验证也不会触发。我的目标是将文本的前景改为红色 <Label Content="{Binding LabelConformidadValidadion, UpdateSourceTrigger=PropertyChanged, NotifyOnValidationError=True}"></Label> 我使用Catel4.5.2,并使用以

我试图通过Property=“validation.ErrorTemplate”在WPF标签上设置验证样式。问题是,即使是标准验证也不会触发。我的目标是将文本的前景改为红色

<Label Content="{Binding LabelConformidadValidadion, UpdateSourceTrigger=PropertyChanged, NotifyOnValidationError=True}"></Label>

我使用Catel4.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"));
        }
受保护的覆盖无效验证字段(列出验证结果)
{
如果(比索!=空&!比索.比索校准值)
validationResults.Add(FieldValidationResult.CreateErrorWithTag(Peso_-CalienteProperty,“无其他capturado el-Peso”,“Captura_-PesoCalienteCanExecute”);
如果(比索!=null&&!Peso.IC.HasValue)
validationResults.Add(FieldValidationResult.CreateErrorWithTag(LabelConformidadValidation,“无capturado el INDICADO IC”、“Captura_PesoCalienteCanExecute”);
}

viewmodel已验证,但标签周围的标准红色框从未出现。我发现的一件事是,如果我正在调试并打开和关闭标签上的NotifyOnValidationError=True属性,标签会显示通常的红色框。

问题是我将规则附加到字段,而不是属性数据

完整的答案是这样的

XAML


C#:

公共字符串标签ConformidadValidation
{
获取{返回GetValue(LabelConformidadValidationProperty);}
set{SetValue(LabelConformidadValidationProperty,value);}
}
公共静态只读属性Data LabelConformidadValidationProperty=RegisterProperty(“LabelConformidadValidation”,类型为(字符串),null);

受保护的覆盖无效验证字段(列出验证结果)
{
如果(比索!=空&!比索.比索校准值)
validationResults.Add(FieldValidationResult.CreateErrorWithTag(Peso_-CalienteProperty,“无其他capturado el-Peso”,“Captura_-PesoCalienteCanExecute”);
如果(比索!=null&&!Peso.IC.HasValue)
添加(FieldValidationResult.CreateError(LabelConformidadValidationProperty,“无se ha capturado el Indicator IC”);
}

您是否也尝试过将validateSondaerRors=true设置为true?我尝试过,将两者都设置为启用状态。然后单独设置每一个。
<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>
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"));
        }