Quelle est l'utilisation de la méthode ConvertBack dans L'interface IValueConverter?
Quelle est l'utilisation de la méthode ConvertBack
dans l'interface IValueConverter
.
Quand il appellera?
Ou quel est l'ordre d'invocation de la méthode Convert
et ConvertBack
.
J'ai posé une question ici parce que: j'ai lié une propriété de codebehind à la propriété TextBox et en utilisant convertor
pour cette propriété,
Puis d'abord Convert
méthode invoke et quand je change TEXT
dans TEXTBOX
rien ne se passe mais dès que je ferme le formulaire ConvertBack
la méthode invoke.
Qu'est-ce, il n'y a pas toutes les règles qui définissent quand le feu ConvertBack
méthode?
NOTE: Vous trouverez peut-être que c'est possible en double d'une autre question sur ce site...mais pas n'importe quelle question que j'ai trouvé utilisation complète dans la liste de suggestions quand j'écris ma question.
3 réponses
IMO, la méthode ConvertBack
est utilisée pour convertir votre représentation visuelle des données au type de données spécifique.
Par exemple: vous utilisez un convertisseur pour convertir un booléen true
en chaîne "TrueBoolean"
. Ce texte sera affiché dans votre zone de texte. Lorsque vous modifiez la valeur de la zone de texte, la méthode ConvertBack
sera appelée dès que la liaison se déclenchera à nouveau (onfocuslost par défaut). Maintenant, votre méthode ConvertBack
va essayer de convertir la nouvelle valeur en le type de données que vous voulez qu'il soit. Ainsi, vous aurez à implémentez une logique pour convertir "FalseBoolean"
en false
.
public class Converter : IValueConverter
{
object IValueConverter.Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return (bool) value ? "TrueBoolean" : "FalseBoolean";
}
object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
var s = (string) value;
if (s.Equals("TrueBoolean",StringComparison.CurrentCultureIgnoreCase))
return true;
if (s.Equals("FalseBoolean", StringComparison.CurrentCultureIgnoreCase))
return false;
throw new Exception(string.Format("Cannot convert, unknown value {0}", value));
}
}
Cette technique est beaucoup utilisée dans DataGrids si Je ne me trompe pas.
J'espère que c'est un peu clair...
Mise à JOUR
A propos de vous question dans le commentaire:
Pour remplacer le comportement de liaison par défaut OnFocusLost
, Vous devez modifier votre liaison comme ceci:
<TextBox Text="{Binding MyText, UpdateSourceTrigger=PropertyChanged}"/>
<!--syntax might differ, can't access VS at the moment.-->
ConvertBack
c'est quand vous avez mode=TwoWay
sur votre liaison.
Il convertit l'entrée de l'utilisateur dans le type de données auquel vous vous liez et est invoqué lorsque TextBox
(disons) perd le focus.
Par exemple (si cela n'a pas été intégré), si vous avez un nombre qui représente un prix, la méthode Convert
prendrait la valeur et la formaterait en une chaîne avec le symbole monétaire correct, le séparateur décimal, etc.
Si l'utilisateur saisit une nouvelle valeur - y compris un symbole monétaire possible, des milliers séparateur etc. vous utiliseriez la méthode ConvertBack
pour analyser la chaîne et extraire la valeur numérique.
Un autre exemple pourrait être la saisie du numéro de carte de crédit. L'utilisateur peut entrer le numéro d'une chaîne unique de chiffres ou groupes de chiffres séparés par des espaces ou des tirets. La méthode ConvertBack
prendrait toutes ces entrées possibles et les convertirait au format unique dont vous avez besoin.
Vérifiez la propriété UpdateSourceTrigger sur votre liaison. http://msdn.microsoft.com/library/system.windows.data.binding.updatesourcetrigger.aspx
La zone de texte mettra à jour par défaut la source si elle perd le focus, en utilisant UpdateSourceTrigger, vous pouvez définir ce comportement sur la mise à jour immédiate de la source si le contenu de la zone de texte change.
HTH Dominik