Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Daten beim Wechsel von einem UserControl zum anderen speichern
Beathoven
myCSharp.de - Member



Dabei seit:
Beiträge: 23

Themenstarter:

Daten beim Wechsel von einem UserControl zum anderen speichern

beantworten | zitieren | melden

Guten Morgen zusammen,

ich bastel gerade an einer kleinen Applikation und stoße dabei erstmals in WPF auf ein Problem, zu dem mir der richtige Ansatz (oder die richtigen Ansätze) fehlt.

Um mein Problem einfach nachzuvollziehen, habe ich eine ZIP Datei mit einem kleinem Beispielprojekte an diesen Beitrag angehangen.

Im Prinzip ist es eine Applikation, die zwei UserControls (Seite1 und Seite2) beinhaltet. Diese wiederum sind nur mit einer Textbox und einem "Speichern"-Button gefüllt.
Je nachdem welchen Menüpunkt ich auswähle, wird die entsprechende Seite aufgerufen.

Jetzt möchte ich aber, dass man nicht einfach von Seite1 auf Seite2 (oder umgekehrt) wechseln kann, wenn nicht vorher sichergestellt ist, dass
a) sich der Text geändert hat und
b) dieser durch Drücken des Speicher-Buttons gespeichert wurde.

Ebenso gut kann man sich vorstellen, dass die Applikation viel umfangreicher ist, und es generell zu einer Fehlermeldung kommen soll, wenn ich den Bereich einer Seite verlasse ohne zu speichern.

Ich habe versucht über google etwas herauszufinden, allerdings sind die Lösungen meisstens recht unverständlich und passen auch nicht zu meinem Problem.
Routing-Strategien, Validierungen und Commands soll man sich anschauen - aber ein gutes Beispiel suche ich vergebens.

Wie würdet Ihr das lösen? Welche Strategie verfolgt Ihr?

Danke und LG
Beathoven
Attachments
private Nachricht | Beiträge des Benutzers
iSliver
myCSharp.de - Member



Dabei seit:
Beiträge: 57

beantworten | zitieren | melden

Wieso nicht einfach ValueChanged und das Button Event nutzen ?

Also text box protery changed Event nutzen und wenn das gefeurt wurde und der button geklickt wurde die andere Seite enablen.
Oder versteh ich dein Problem nicht ?
private Nachricht | Beiträge des Benutzers
Beathoven
myCSharp.de - Member



Dabei seit:
Beiträge: 23

Themenstarter:

beantworten | zitieren | melden

Nee, das wäre zu einfach.

Die Beispiel-Applikation ist bewusst klein gehalten, um den Überblick nicht zu verlieren.
Ich versuche mal das Szenario zu beschreiben:

User tippt auf Seite 1 einen Text ein, aber er klickt nicht auf "speichern". Das ist auch in Ordnung, denn in den meisten Fällen gibt es mehr als ein Textfeld in einer Eingabemaske.
Durch die Eingabe des Texts wird das "textChanged" Event ausgelösst, dieses aktiviert den Speichern Button (jedoch ohne ihn auszulösen).

Der User will jetzt eine andere Seite, also hier Seite 2, aufrufen. Im Idealfall klickt er dazu zunächst auf "Speichern", was (theoretisch) einen Speichervorgang auslösst und den Button wieder deaktiviert. Danach klickt er dann auf "Seite 2".

Dummerweise gibt es den Idealfall eher selten, also muss ich prüfen, ob tatsächlich gespeichert wurde. Jetzt könnte ich wie folgt vorgehen:
User klickt auf Seite 2. Ich prüfe woher der Aufruf kommt, und schaue nach, ob es da einen Button gibt, der aktiviert ist (also wurde Text verändert, aber eben nicht gespeichert). Ich werfe eine entsprechende Fehlermeldung aus und breche den Aufruf von Seite 2 ab (irgendwie).

So richtig praktisch erscheint mir das aber nicht, zumal ich dann diese Prüf-Funktion überall(!) aufrufen müsste, wo ich vom aktuellen Fenster aus hinspringen kann. Das kann nicht der richtige Weg sein.

Und jetzt die Frage: was ist der richtige Weg?

Danke und LG
Beathoven
private Nachricht | Beiträge des Benutzers
iSliver
myCSharp.de - Member



Dabei seit:
Beiträge: 57

beantworten | zitieren | melden

automatisch speichern wenn werte sich ändern ?
oder das obengenannte etwas abstrahieren wenn die app größer wird.
private Nachricht | Beiträge des Benutzers
Beathoven
myCSharp.de - Member



Dabei seit:
Beiträge: 23

Themenstarter:

beantworten | zitieren | melden

Es geht mir um die Abstrahierung und nicht um die automatische Speicherung.
private Nachricht | Beiträge des Benutzers
wackelkontakt
myCSharp.de - Member

Avatar #avatar-3290.jpg


Dabei seit:
Beiträge: 109
Herkunft: Dresden

beantworten | zitieren | melden

Hallo,

ein Ansatz wäre es beispielsweise in den UserControls Events zu feuern, auf welche dein MainWindow reagiert (also z.B. bei TextChanged die entsprechenden MenuItems deaktivieren und nach dem Speichern halt wieder aktivieren). Dazu ist es aber notwendig das die Controls beim Umschalten nicht jedesmal neu erstellt werden, sondern als Feld gehalten werden. Wenn du wirklich eine umfangreichere Applikation erstellen möchtest dann solltest du solche grundsätzlichen Sachen beachten. Außerdem könntest du dir auch mal das MVVM-Muster anschauen, welches bei einer gewissen Projektgröße wirklich von Vorteil sein kann.

Viele Grüße!
Um Rekursion zu verstehen, muss man erst mal Rekursion verstehen, muss man erst mal Rekursion verstehen, ....
private Nachricht | Beiträge des Benutzers