9
votes

Wpf textbox qui met uniquement à jour la liaison lorsque l'entrée est enfoncée.

Tout. J'ai une "numeritextbox" usercontrol qui permet uniquement des entrées numériques. J'ai besoin d'exposer un autre comportement spécialisé, c'est-à-dire que j'en ai besoin pour pouvoir le lier à une valeur VM Owwaytosource et que la mise à jour de la valeur VM lorsque j'appuie sur Entrée tout en focalisant la zone de texte. J'ai déjà un événement entréprimé qui incendie lorsque j'appuie sur la touche, je suis en train de faire du mal à comprendre un moyen de faire mettre à jour cette action ...


0 commentaires

3 Réponses :


11
votes

Dans votre expression de liaison, définissez les mises à jourOrigger à explicite.

BindingExpression exp = textBox.GetBindingExpression(TextBox.TextProperty);
exp.UpdateSource();


0 commentaires

3
votes

Si vous utilisez MVVM, vous pouvez utiliser une combinaison d'une approche de Decastelijau avec une propriété personnalisée attachée qui appelle mises à jour sur la zone de texte lors de la prévisualisation en peau de prévisualisation.

<TextBox myprops:UpdaterProps.UpdateSourceOnKey="Enter" ... />


0 commentaires

8
votes

Voici une version complète de l'idée fournie par Anderson IMES:

public static readonly DependencyProperty UpdateSourceOnKeyProperty = 
    DependencyProperty.RegisterAttached("UpdateSourceOnKey", 
    typeof(Key), typeof(TextBox), new FrameworkPropertyMetadata(Key.None));

    public static void SetUpdateSourceOnKey(UIElement element, Key value) {
        element.PreviewKeyUp += TextBoxKeyUp;
        element.SetValue(UpdateSourceOnKeyProperty, value);
    }

    static void TextBoxKeyUp(object sender, KeyEventArgs e) {

        var textBox = sender as TextBox;
        if (textBox == null) return;

        var propertyValue = (Key)textBox.GetValue(UpdateSourceOnKeyProperty);
        if (e.Key != propertyValue) return;

        var bindingExpression = textBox.GetBindingExpression(TextBox.TextProperty);
        if (bindingExpression != null) bindingExpression.UpdateSource();
    }

    public static Key GetUpdateSourceOnKey(UIElement element) {
        return (Key)element.GetValue(UpdateSourceOnKeyProperty);
    }


0 commentaires