J'ai une classe, appelée DateField
, qui a une propriété de chaîne Value
. Si vous définissez cette propriété sur une chaîne qui peut être analysée en une date valide, le poseur de propriété met Value
à la date correctement mis en forme, par exemple:Liaison bidirectionnelle WPF: comment mettre à jour un TextBox avec une version formatée de la valeur qu'il vient de définir?
private string _Value;
public string Value
{
get
{
return _Value;
}
set
{
if (value == _Value)
{
return;
}
object result;
if (TryParse(value, out result))
{
_Value = Format(result);
}
else
{
_Value = value;
}
OnPropertyChanged("Value");
}
}
Je crée une zone de texte qui est lié à ce domaine:
<DataTemplate DataType="{x:Type m:DateField}">
<TextBox
IsTabStop="True"
Text="{Binding Value, Mode=TwoWay, ValidatesOnDataErrors=True}">
</TextBox>
</DataTemplate>
Lorsque j'entre, par exemple, "010109"
dans ce champ et une tabulation, le Binding
définit correctement la propriété Value
sur cette chaîne. La propriété setter s'exécute, _Value
est correctement défini sur "01/01/2009"
(l'implémentation TryParse
dans cette classe est un peu plus catholique dans ce qu'elle accepte que DateTime.TryParse
is) et l'événement PropertyChanged
est déclenché. Je sais que ce dernier est en train de se passer parce qu'un autre objet abonné à la liste est mis à jour. Mais le TextBox
ne le fait pas. Pourquoi pas? J'ai mis Value
, j'ai soulevé PropertyChanged
; que dois-je faire de plus?
Terminé; voir ma réponse pour plus de détails. –