J'ai le problème: J'ai quelques contrôles sur un formulaire (une case à cocher, une combo-box, un curseur, une zone de texte). Leurs valeurs sont liées à différentes propriétés du modèle de vue.
Lorsqu'une propriété du modèle de vue a une certaine valeur, I veut que ces contrôles soient "corrigés" (un message d'erreur est affiché et ils sont réglés sur une valeur fixe (par exemple: la case n'est pas cochée lorsque l'utilisateur essaie de le vérifier, le curseur est défini sur une certaine valeur, l'élément sélectionné du combo est le deuxième élément de la liste) Je l'ai fait de cette façon (un exemple simplifié pour la zone de texte): Dans la vue:Forcer la mise à jour de la vue sur l'erreur de validation en utilisant le modèle MVVM
<TextBox
Text="{Binding ViewModelProperty,
NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged,
ValidatesOnDataErrors=True, NotifyOnValidationError=True}"
/>
Dans le modèle de vue: la propriété est définie comme suit:
String _ViewModelProperty;
public String ViewModelProperty
{
get
{
return _ViewModelProperty;
}
set
{
_ViewModelProperty = value;
OnPropertyChanged("ViewModelProperty");
}
}
et la mise en œuvre de IDataErrorInfo:
String IDataErrorInfo.this[String propertyName]
{
get
{
String error = null;
if (propertyName == "ViewModelProperty")
{
if (ViewModelProperty != "FixedValue")
{
error = DisplayMessage("You can only set a fixed value here");
ViewModelProperty= "FixedValue";
}
}
return error;
}
}
Cela fonctionne bien pour la case, mais pour toutes les autres commandes, il fonctionne comme ceci: l'utilisateur définit la valeur « mauvaise », le message d'erreur est affiché puis, au lieu de mettre à jour le contrôle avec la valeur fixe, la valeur erronée est toujours affichée (elle n'est plus synchronisée avec le modèle de vue).
Je n'arrive pas à comprendre comment forcer une mise à jour de la valeur du contrôle.
Merci d'avance.
Pourquoi autorisez-vous l'utilisateur à changer le contrôle, s'il est réparé ce qui est autorisé? – Goblin