Welches Ereignis sollte ein Modell zu aktualisieren, von TextBox (Lost-Focus, Lostkeyboardfocus, usw.) in WPF verwendet werden? Wie Vorrang der Ereignisse in WPF setzen?

StackOverflow https://stackoverflow.com/questions/4447645

Frage

ich eine Anwendung, in denen es viele Textfelder und einige Tasten wie Speichern, Speichern unter, etc.
Wenn der Benutzer einen Text bearbeitet, ich habe die Datenbank für einen gewissen Bereich zu überprüfen, validieren die Datenbank den Bereich und aktualisieren. Wenn es in Wert jeder Fehler vom Benutzer eingegeben, dann sollte ich nicht die TextBox zu verlieren Fokus ermöglichen.

Ich war mit Lost-Focus-Ereignis für dieses und es funktionierte gut, bis in letzter Zeit entdeckte ich einen Fehler in meiner Anwendung.

Bug: Der Benutzer bearbeitet einen Wert in TextBox und klickt dann auf Speichern-Button; das Lostfocus-Ereignis wird nicht aufgerufen und so Datenbank wird nicht aktualisiert zu werden: (

Nun meine Frage, welches Ereignis soll ich in TextBox verwenden, um die Datenbank zu aktualisieren. Ich habe versucht, Textchanged-Ereignis, aber es bestätigt für jeden Charakter und machen meine Anwendung langsam. Ich bin verwirrt für diese Art von Anwendung die richtige Veranstaltung in chosing!

Hinweis : ** Die Tasten sind in verschiedenen Usercontrol

EDIT 1: Ich habe einige Befehle gebunden von Buttons klicken, diese Befehle werden immer vor dem Lost-Focus ausgeführt !! Kann ich Vorrang oder etwas dergleichen angebracht Verhaltensweisen oder Befehle soll nach Lost-Focus-!!

ausgeführt werden sollen

EDIT 2: Ich habe nur Debuggen der Anwendung, indem Sie einige Befehle zu deaktivieren, was ich fand, in einigen Fällen war, wird die DelegateCommand vor Lost-Focus ausgeführt, so dass ich das vermeiden wollen. Wie kann ich vorgehen? Ich fühlte mich während der Entwicklung seiner unmöglich developa reine MVVM Anwendung so ich bin ein bisschen ein bisschen Code-Behind verwenden!

War es hilfreich?

Lösung

Trapping den Tastaturfokus innerhalb einer Kontrolle ist in der Regel ein Zeichen für schlechte UI-Design -. Es ist ziemlich benutzerfeindlich den Benutzer zu beheben Daten in einer Steuerung zu zwingen, bevor er irgendwo sonst auf dem Benutzeroberfläche eingeben kann

Wie gesagt, sollten Sie hier überhaupt nicht verwenden Veranstaltungen. Sie versuchen, eine Windows Forms-Anwendung in WPF zu schreiben. Sie sollten eine WPF-Anwendung schreiben.

Erstellen Sie eine Klasse, die ein logisches Modell Ihrer Ansicht ist - das heißt, es gibt eine string Eigenschaft für das Textfeld und einer Command Eigenschaft (oder, wahrscheinlicher, ein RelayCommand) für die Schaltfläche Speichern. Binden Sie das Textfeld an die String-Eigenschaft, z.

<TextBox Text="{Binding MyTextProperty, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>

Da die UpdateSourceTrigger PropertyChanged ist, wird das Quellobjekt jedesmal, wenn der Benutzer ein Zeichen erhalten aktualisiert.

Binden Sie die Taste, um den Befehl Eigenschaft, z.

<Button CommandBinding="{Binding SaveCommand}">Save</Button>

Implementieren Sie die entsprechenden CanSave und Save Methoden, dass der RelayCommand (wie in Josh Smith wesentliche Artikel über das MVVM-Muster) erfordern, so dass die Taste aktiviert, wenn die String-Eigenschaft gültig ist, und deaktiviert, wenn es nicht ist.

Andere Tipps

Ich denke, der beste Ansatz einen Benutzer verhindert, um fortzufahren, bis alle gültigen Informationen gesammelt worden sind.

Wie ein Installationsassistent mit Terms & Conditions Dialog und Next Taste. Bis Sie die I Agree Checkbox, Next Taste deaktiviert.

Auf diese Weise müssen Sie sich keine Sorgen machen über Benutzer Verfahren ohne gültige Informationen. Auf diese Weise können Sie jedes Ereignis auf TextBox verwenden, um Ihre Daten zu überprüfen.

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