Frage

Ich bin derzeit mit Silverlight 4 und nach dem MVVM Muster. Ich habe Login-Boxen gebunden mein Ansichtsmodell wie folgt:

<PasswordBox Password="{Binding Path=Password, Mode=TwoWay}" />

Ich habe dann später auf eine Schaltfläche, um einen Befehl gebunden, die auf das Ansichtsmodell der hört Property Ereignis und wenn einer der Databindings hat seine Daten aktualisieren, hat es einen Scheck, um zu sehen, ob es jetzt genug ist Daten auf die Schaltfläche Login ermöglichen.

jedoch nur die Property Ereignis ausgelöst, wenn der Benutzer sich von einer der Kontrollen konzentrieren, würde ich das Modell wie mit jedem Tastendruck aktualisiert werden, so dass die Login-Taste so schnell wie möglich ermöglicht.

War es hilfreich?

Lösung

Erstellen Sie ein Verhalten:

public class UpdateSourceOnPasswordChanged : Behavior<PasswordBox>
{
    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 Ihre XAML:

<PasswordBox Password="{Binding Password, Mode=TwoWay}">
    <i:Interaction.Behaviors>
        <local:UpdateSourceOnPasswordChanged/>
    </i:Interaction.Behaviors>
</PasswordBox>

Jetzt wird die Eigenschaft Passwort aktualisiert als Benutzertypen.

Andere Tipps

würde ich empfehlen, ein Verhalten mit, dass Streams für das OnKeyDown-Ereignis des PasswordBox und Ihr feuert Ansichtsmodell Veranstaltung von dort (oder läuft ein anderes Stück von benutzerdefinierten Code, dass Sie die Property Ereignis anhängen wollte). Datenbindung für Textfelder und deren derivitives (wie PasswordBox) nicht aktualisiert, bis sie verlieren Fokus, so dass Sie manuell die Bindung aktualisieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top