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
WPF - dynamische Formulare?
winmike
myCSharp.de - Member

Avatar #avatar-2991.jpg


Dabei seit:
Beiträge: 174
Herkunft: Graz / Österreich

Themenstarter:

WPF - dynamische Formulare?

beantworten | zitieren | melden

Hallo

Hat sich jemand schon mal mit dynamischen Formularen beschäftigt?

Es geht um folgendes:
Formular, wird von oben nach unten ausgefüllt. Je nachdem was der Kunde auswählt (z.B. Radio oder checkbox) soll der Teil darunter dynamisch angepasst werden.

Weiß jemand, obs da für WPF schon was fertig gibt? Ich würde die Formularlogik auch in XML / XAML machen. Aber vielleicht gibts da ja schon was ;)

Es geht drum, dass so wenig wie möglich im Programm angegriffen werden muss, wenn sich die Abfragelogik ändert oder auch der Inhalt des Formulars.

Danke
LG
private Nachricht | Beiträge des Benutzers
winSharp93
myCSharp.de - Experte

Avatar #avatar-2918.png


Dabei seit:
Beiträge: 6155
Herkunft: Stuttgart

beantworten | zitieren | melden

Hallo winmike,
Zitat von winmike
Hat sich jemand schon mal mit dynamischen Formularen beschäftigt?
dafür ist die WPF wie gemacht.

Lies dich mal in das Thema "DataTemplates" und "DataBinding" ein.
Kombiniert mit z.B. dem MVVM-Pattern ergibt das eine sehr leistungsfähige Möglichkeit.
private Nachricht | Beiträge des Benutzers
winmike
myCSharp.de - Member

Avatar #avatar-2991.jpg


Dabei seit:
Beiträge: 174
Herkunft: Graz / Österreich

Themenstarter:

beantworten | zitieren | melden

Hi winSharp93

Mir geht es weniger um die Darstellung. Eher drum: Wie kann ich so
Entscheidungsformulare abbilden? Ich suche sowas wie (Pseudecode)

<decision>
  <if element="radioGeschlecht" value="männlich">
    <formcontent>männliche fragen</formcontent>
  </if>

  <if element="radioGeschlecht" value="weiblich">
    <formcontent>weibliche fragen</formcontent>
  </if>
</decision>

Und WPF soll das dann irgendwie darstellen ;) Das irgendwie will ich halt nach Möglichkeit nicht selbst machen :D Da es eigentlich ja fast ein Alltagsproblem ist dachte ich, es muss da was geben
private Nachricht | Beiträge des Benutzers
winSharp93
myCSharp.de - Experte

Avatar #avatar-2918.png


Dabei seit:
Beiträge: 6155
Herkunft: Stuttgart

beantworten | zitieren | melden

Wie gesagt: Da hilft das MVVM-Pattern ungemein.
Stelle einfach eine Property bereit, die in Abhängig von einem Boolean (IsMale oder so) z.B. entweder ein MaleVM oder ein FemaleVM mit dein eigentlichen Fragen zurückgibt.
Dieses kannst du dann in einem ContentPresenter mithilfe eines DataTemplates darstellen.
private Nachricht | Beiträge des Benutzers
winmike
myCSharp.de - Member

Avatar #avatar-2991.jpg


Dabei seit:
Beiträge: 174
Herkunft: Graz / Österreich

Themenstarter:

beantworten | zitieren | melden

Hmm. Aber wie kann ich so einen Entscheidungsbaum wie in meinem XML Beispiel bauen? Die Darstellung selbst macht mir kein Kopfzerbrechen. Sowas wie in WF wäre fein
private Nachricht | Beiträge des Benutzers
malignate
myCSharp.de - Member

Avatar #avatar-3206.png


Dabei seit:
Beiträge: 751

beantworten | zitieren | melden

Das ist kein Darstellungsproblem und auch kein richtiges WPF Problem, da geht es erstmal nur um Code.

Ich würde das auch mit dem MVVM Pattern lösen. Das ViewModel hat eine Liste von Fragen für jede "Ebene", also, z.B:

Brands
Models
Colors

und dazu jeweils ein Property:
SelectedBrand
SelectedModel
SelectedColor

alle Properties werden an 3 ComboBoxen gebunden...

Wenn sich der Wert eines SelectedXXX Properties ändert, füllst du entsprechend die Listen mit den Fragen der nächsten Ebene:

Sollte sich das Property SelectedBrand ändern füllst du die Fragen der nächsten Ebene, d.h. du lädst alle Modell dieser Marke und wenn das Model ausgewählt wurde, lädst du alle Farben, die für dieses Modell verfügbar sind.
private Nachricht | Beiträge des Benutzers
Jéré
myCSharp.de - Member

Avatar #avatar-3137.png


Dabei seit:
Beiträge: 152

beantworten | zitieren | melden

Hi,

ich denk, die Frage geht dahin, ob es sowas schon fertig gibt. Antwort NEIN.
In WPF gibt es kein Control, was zaubern kann :)

Du solltest dir, wie die anderen schon schreiben, Gedanken zur Umsetzung machen und dann damit anfangen. Was hier geschrieben steht hört sich doch brauchbar an.
Falls du Schwierigkeiten mit MVVM solltest du diesbezüglich konkrete Fragen stellen, bei denen dir dann auch konkret geholfen werden kann.

Zitat von winmike
Hmm. Aber wie kann ich so einen Entscheidungsbaum wie in meinem XML Beispiel bauen?
Du bindest eben gegen deinen Radiobutton und schaust ob true oder false und lädst dementsprechend den Content.


Grüßle
Jéré
private Nachricht | Beiträge des Benutzers
winmike
myCSharp.de - Member

Avatar #avatar-2991.jpg


Dabei seit:
Beiträge: 174
Herkunft: Graz / Österreich

Themenstarter:

beantworten | zitieren | melden

Hi

MVVM mit Composite Library hab ich eh schon verwendet. Das ist wie gesagt nicht das Problem

Ich glaube ich habe meine Frage schlecht gestellt und im falschen Forum ;)
Ich würde es jetzt so stellen: Wie kann ich einen dynamischen Fragebogen erstellen, welcher auch zur Laufzeit / deploytime noch per XML o.ä. geändert werden kann?

Da in .NET ja fast alles auf XAML basiert und man das auch zur Laufzeit einlesen kann, dachte ich, dass es da schon was gibt. Ich will eine Exe - und die soll je nach XAML File dann die Fragen stellen und als Output z.B. wieder eine XML Datei ausspucken.

Schade dass es da nichts gibt :( Werde mich dann wohl selbst ans Werk machen müssen

Trotzdem Danke
LG
private Nachricht | Beiträge des Benutzers
tom-essen
myCSharp.de - Experte

Avatar #avatar-2140.png


Dabei seit:
Beiträge: 1928
Herkunft: NRW

beantworten | zitieren | melden

Hallo!

@winmike:
In WPF kann man mithilfe von DataTriggern in XAML einfache Aktionen durchführen.
Auf diese Weise ist es damit z.B. möglich, je nach Wert einer Checkbox einen bestimmten Bereich ein- und einen anderen auszublenden, und zwar ganz ohne Code.
Nobody is perfect. I'm sad, i'm not nobody
private Nachricht | Beiträge des Benutzers