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"); } }
Oh, vous êtes un sauveur! Merci un million. J'ai mis à jour le code pour refléter les changements. – azamsharp
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