WPF de Liaison de zone de texte avec mise en forme

J'ai juste mis à jour notre application wpf à partir de 3.5sp1 à 4.0.

Le code ci-dessous que nous utilisons pour lier la zone de texte sous-jacent au modèle de vue. La zone de texte est modifiable.

    <TextBox HorizontalContentAlignment="Right"
Text="{Binding Path=Price,   StringFormat={0:#,##0;(#,##0)},  Mode=TwoWay,  ValidatesOnDataErrors=True,  UpdateSourceTrigger=PropertyChanged, ValidatesOnExceptions=True}"/>

En 3.5sp1 la mise en forme ne pourrait se produire qu'au départ. Ainsi, lorsque la zone de texte a été chargé et lié à la valeur de 4000, la mise en forme allait changer à 4 000. Si l'utilisateur a modifié cette valeur aucune mise en forme n'aurait lieu.

Dans la version 4.0 de la mise en forme se produit comme la modification de la valeur (c'est à dire pendant que l'utilisateur entre dans une nouvelle valeur). Si, en théorie, cela semble OK, en réalité, son une catastrophe. Le curseur est tous sur la place. Ses inutilisable.

Maintenant, nous pourrions changer le UpdateSourceTrigger "LostFocus" mais qui introduit de nouveaux problèmes avec les données ne sont pas validées dans certains scénarios.

Est-il un moyen pour obtenir l'ancien 3.5sp1 comportement?

Mise à jour de 1

À l'aide de Convertisseur encore procudes même comportement:

public class DecimalConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value != null)
            return ((decimal)value).ToString("#,##0;(#,##0)");

        return string.Empty;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value;
    }
}

et de la modification de la XAML:

<TextBox Text="{Binding Path=Price, Converter={StaticResource DecimalConverter}, Mode=TwoWay, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged, ValidatesOnExceptions=True}"/>

Mise à jour 2

Similaire à ce connectez l'article.

Dur. Peut-être que le mieux est d'examiner les problèmes spécifiques que vous rencontrez avec LostFocus. Par exemple, j'ai dû déclencher manuellement la liaison/validation lorsque l'utilisateur appuie sur ctrl + S tandis que dans la zone de texte.
Oui Jonathan, j'ai commencé à regarder LostFocus, mais a été dans l'espoir d'éviter un énorme changement global. 🙁

OriginalL'auteur ozczecho | 2011-01-04