2010-01-29 6 views
1

J'utilise mon moteur de validation personnalisé pour valider mes propriétés ViewModel. Je suis coincé à la dernière étape. Je veux changer la couleur d'arrière-plan du TextBox lorsque la validation échoue. J'ai donc implémenté DataTrigger s et l'ai lié à la propriété HasError. HasError est une propriété CLR normale.Déclencheurs de données WPF et modification du style du contrôle

public bool HasError 
     { 
      get 
      { 
       var hasError = Errors.Count() > 0; 
       return hasError; 
      } 
     } 

Et voici le code:

<Style x:Key="textBoxStyle" TargetType="{x:Type TextBox}">     

      <Style.Triggers> 

       <DataTrigger Binding="{Binding Path=HasError}" Value="True"> 

        <Setter Property="Background" Value="Red" /> 
       </DataTrigger>   


      </Style.Triggers> 

     </Style> 

Le problème est qu'il sera tiré qu'une seule fois lorsque le this.DataContext est affecté à un modèle de vue. Donc, j'ai pensé que je pourrais peut-être utiliser la propriété de dépendance au lieu de la propriété normale, mais cela n'a pas fonctionné non plus.

Des idées?

MISE À JOUR:

Il semble que les DataTrigger s ne sont tirés quand accroché aux propriétés CLR et pas les propriétés de dépendance.

MISE À JOUR 2:

Si seul le code suivant travaillé:

****<Trigger Property="{Binding Path=HasError}" Value="True"> 
        <Setter Property="Background" Value="Red" /> 
       </Trigger>**** 

MISE À JOUR 3 DE TRAVAIL:

Comme mentionné la réponse que je devais tirer l'événement INotifyPropertyChanged.

publics ObservableCollection erreurs {get {return (ObservableCollection) GetValue (ErrorsProperty); } défini { SetValue (ErrorsProperty, value);

  OnPropertyChanged("HasError"); 

     } 
    } 

Répondre

1

système WPF ne saura jamais que votre propriété a changé HasError, c'est la raison pour laquelle il se déclenche qu'une seule fois. L'une des méthodes pour y parvenir consiste à mettre en œuvre INotifyPropertyChanged et à déclencher PropertyChanged événements lorsque la collection d'erreurs change.

+0

Oh, vous êtes un sauveur! Merci un million. J'ai mis à jour le code pour refléter les changements. – azamsharp

+0

Ah a trouvé un bug dans mon code. Toutes les propriétés dépendent de la collection Errors. Ce qui signifie que tous les rouges de couleur s'il y a une seule entrée dans la collection des erreurs. – azamsharp

Questions connexes