2017-10-10 30 views
0

我想通过Property =“Validation.ErrorTemplate”在WPF标签上设置样式验证。问题在于,甚至没有标准验证触发器。我的目标是将文本的前景改为红色。使用WPF + Catel标签上的触发验证

<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属性,标签确实会显示常见的红框。

+0

你尝试设置ValidatesOnDataErrors =真呢? –

+0

我做了,同时设置。然后单独设置每一个。 –

回答

1

问题是我将规则附加到字段而不是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")); 
     }