2 Stimmen

Wie kann ich ein Silverlight-Datenbinding aktualisieren, während der Benutzer tippt?

Ich verwende derzeit Silverlight 4 und folge dem MVVM-Muster. Ich habe Anmeldefelder an meinen ViewModel gebunden, wie folgt:

Später habe ich dann einen Button, der an ein Command gebunden ist, welches auf das PropertyChanged-Ereignis des ViewModels lauscht. Wenn eine der Datenbindungen aktualisiert wird, wird überprüft, ob nun genügend Daten vorhanden sind, um den Anmelde-Button zu aktivieren.

Das PropertyChanged-Ereignis wird jedoch nur ausgelöst, wenn der Benutzer den Fokus von einem der Steuerelemente ändert. Ich möchte, dass das Modell bei jedem Tastenanschlag aktualisiert wird, damit der Anmelde-Button so schnell wie möglich aktiviert wird.

5voto

PL. Punkte 2185

Erstellen Sie ein Verhalten:

public class UpdateSourceOnPasswordChanged : Behavior
{
    protected override void OnAttached()
    {
        base.OnAttached();

        AssociatedObject.PasswordChanged += OnPasswordChanged;
    }

    private void OnPasswordChanged(object sender, RoutedEventArgs e)
    {
        var binding = AssociatedObject.GetBindingExpression(PasswordBox.PasswordProperty);
        binding.UpdateSource();
    }

    protected override void OnDetaching()
    {
        base.OnDetaching();

        AssociatedObject.PasswordChanged -= OnPasswordChanged;
    }
}

Und ändern Sie Ihr XAML:

Jetzt wird die Eigenschaft Password aktualisiert, während der Benutzer tippt.

0voto

Raumornie Punkte 1444

Ich würde empfehlen, ein Verhalten zu verwenden, das auf das OnKeyDown-Ereignis des PasswordBox hört und von dort aus das Ereignis Ihres ViewModel auslöst (oder einen anderen benutzerdefinierten Code ausführt, den Sie am PropertyChanged-Ereignis anhängen wollten). Die Datenbindung für TextBoxes und ihre Derivate (wie PasswordBox) wird erst aktualisiert, wenn sie den Fokus verlieren, daher müssen Sie die Bindung manuell aktualisieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X