WPF RaisePropertyChanged-event auf den Fokus verloren
Habe ich eine C# - WPF-MVVM-Anwendung, die funktioniert einwandfrei.
Das problem ist nur, wenn ich ändern Sie ein Textfeld und klicken Sie auf das Menü. Wenn ich das Tue, ohne zu klicken auf ein anderes Steuerelement, die Ansicht->viewmodel-Ereignis wird nie ausgelöst, da die textbox nicht den Fokus verloren. Korrigieren Sie mich, wenn ich falsch bin, aber ich denke, die RaisePropertyChanged ist nur feuerte auf LostFocus (oder OnBlur oder eine ähnliche Veranstaltung).
Also, klicken Sie auf die Menü-Schaltfläche speichern rechts nach dem Bearbeiten der textbox bewirkt, dass das viewmodel die Daten zu speichern, mit alten Werten.
So, Wiederaufnahme:
Diese Reihenfolge funktioniert:
- Bearbeiten Sie die text-box
- Klicken auf ein anderes Steuerelement
- RaisePropertyChanged ausgelöst wird, wird viewmodel aktualisiert
- Klicken Sie auf die Schaltfläche speichern auf das Menü
- Gespeicherten Daten mit den richtigen Werten
Dieser Sequenz gibt mir eine Fehlermeldung:
- Bearbeiten Sie die text-box
- Klicken Sie auf die Schaltfläche speichern auf das Menü
- Gespeicherten Daten mit den richtigen Werten
Wie man dieses Problem lösen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist ein häufiges Problem mit den Textboxen in WPF und WinForms. Sie können dies umgehen, indem er den Bindungs-system zu aktualisieren Sie die VM mit jeder änderung an der TextBox statt, wenn es den Fokus verliert. Um dies zu tun, legen Sie die
UpdateSourceTrigger
von der Bindung anPropertyChanged
. Dieses schreiben wieder in die VM jederzeit die TextBox stellt sich diePropertyChanged
Ereignis für seineText
Eigenschaft.Für die
TextBox.Text
Abhängigkeitseigenschaft, seine Standard -UpdateSourceTrigger
istLostFocus
(d.h. dein view-model-Eigenschaft aktualisiert wird, wenn das Steuerelement den Fokus verliert). Um das Objekt wird sofort aktualisiert, sobald text eingegeben wird, legen SieUpdateSourceTrigger=PropertyChanged
. (Siehe den link oben für mehr Infos -- es tatsächlich deckt, deinem Beispiel zu speziell.)