derzeit programmiere ich in c# und Win Forms und habe ein Problem. Und zwar folgendes:
Ich habe ein Main-Form, über das sich ein weiteres Form über den Button "Konfiguration" öffnen lässt. Dieses besteht aus Labels und Textboxen besteht. Jeder Textbox ist an einem Objekt gebunden:
userTextEdit.DataBindings.Add(new Binding("Text",Settings.Instance,"UserName",true,DataSourceUpdateMode.OnPropertyChanged));
Das Objekt Settings.Instance besitzt verschiedene Attribute sowie die dazugehörigen get/set-Methoden:
private string userName = string.Empty;
public string UserName { get { return userName; }set { userName = value; } }
Wenn ich nun etwas in die Textbox eingebe, wird über die Datenbindung der Wert in die Variable zurückgeschrieben und gespeichert. Wenn ich das Form schließe und wieder öffne wird der neue Wert der Variable auch in der Textbox angezeigt. Soweit so gut.
Nun möchte ich aber, dass er diese Werte nur übernimmt, wenn ich den Button "Änderungen übernehmen" drücke und nicht direkt bei der Eingabe. Würde man etwas ändern und z.B. das X-Symbol oder den Button "Abbrechen" drücken, so dürfte nichts übernommen werden und der alte Wert sollte wieder darin stehen. Doch das tut es leider
Ich habe auch schon probiert, DataSourceUpdateMode.OnValidation zu verwenden, leider ohne Erfolg. Hier werden auch alle Änderungen direkt übernommen, wenn das Textfeld verlassen wird.
Würde ich die Option CausesValidation=false für jedes Textfeld setzen, dann würden zwar die Textfelder nur validieren werden, wenn ich eine entsprechende DoValidate-Methode an den Textfeldern aufrufe, wenn der Button gedrückt wird, dennoch werden auch in diesem Fall nicht alle Werte korrekt gespeichert.
Ich habe dazu ein Bild angehängt, um den Sachverhalt etwas zu verdeutlichen.
Meine Frage besteht nun darin, wie ich die DataBinding-Methode aufrufen muss, damit die Werte zwar gespeichert werden, aber nur dann, wenn auch der Button "Änderungen übernehmen" gedrückt wird?