Textbox Datenbindung --> Text wird nicht aktualisiert

  • WPF

Es gibt 21 Antworten in diesem Thema. Der letzte Beitrag () ist von Nofear23m.

    Textbox Datenbindung --> Text wird nicht aktualisiert

    Servus Forum,

    ich benötige wieder mal Hilfe bei der Datenbindung. Ich habe in meinem Projekt ein TabControl mit verschiedenen Produkten. Bei Produkt 3 habe ich einen Button, der mir eine Zufallszahl erzeugt. Diese soll dann in einem Textfeld in dem gleichen Tab angezeigt werden.

    Hier ein Ausschnitt aus dem XAML:
    Spoiler anzeigen

    XML-Quellcode

    1. <TabControl ItemsSource="{Binding Produktliste}" SelectedItem="{Binding CurrentTab}" Margin="10,10,10,5">
    2. <TabControl.ContentTemplate>
    3. <DataTemplate>
    4. <ContentControl Content="{Binding}">
    5. <ContentControl.Resources>
    6. <DataTemplate DataType="{x:Type prokla:Produkt_1}">
    7. <Image Source="{Binding Produktbild}" Width="409" Height="363" Stretch="UniformToFill"/>
    8. </DataTemplate>
    9. <DataTemplate DataType="{x:Type prokla:Produkt_2}">
    10. <StackPanel>
    11. <Image Source="{Binding Produktbild}" Width="409" Height="363" Stretch="UniformToFill"/>
    12. <Button Content="{Binding ButtonContent}"/>
    13. </StackPanel>
    14. </DataTemplate>
    15. <DataTemplate DataType="{x:Type prokla:Produkt_3}">
    16. <UniformGrid Rows="4">
    17. <Image Source="{Binding Produktbild}" Width="50" Height="50" Stretch="UniformToFill"/>
    18. <Button Content="{Binding ButtonContent}"
    19. Command="{Binding DataContext.ReadAuslegung, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TabControl}}}"
    20. CommandParameter="{Binding}" Width="80" Height="30"/>
    21. <TextBox Text="{Binding Leistung}" Width="80" Height="30"/>
    22. </UniformGrid>
    23. </DataTemplate>
    24. </ContentControl.Resources>
    25. </ContentControl>
    26. </DataTemplate>
    27. </TabControl.ContentTemplate>
    28. </TabControl>


    In Zeile 21 versuche ich den Inhalt der Box an eine Property zu binden, diese befindet sich in der Klasse ReadLV:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. ​Public Class ReadLV
    2. Public _Leistung As Integer
    3. Public Property Leistung As Integer
    4. Get
    5. Leistung = _Leistung
    6. End Get
    7. Set(value As Integer)
    8. _Leistung = value
    9. Produkt_3.Leistung = value
    10. End Set
    11. End Property
    12. Public Sub New(Dateipfad As String, BTSend As Bauteil_Base)
    13. 'hier wird normalerweise eine Datei mit Informationen eingelesen --> stattdessen wird Leistung ein Zufallswert zugewiesen
    14. 'If ReadPath = "" Then
    15. ' Exit Sub
    16. 'Else
    17. ' ReadATLDatei()
    18. 'End If
    19. Dim LRnd As New Random
    20. Leistung = LRnd.Next(5000)
    21. End Sub
    22. 'Public Sub ReadATLDatei()
    23. ' '==========================================================================================
    24. ' 'Routinen zum Auslesen einer vorhandenen Datei
    25. ' '==========================================================================================
    26. 'End Sub
    27. End Class


    ReadLV wird gestartet, wenn der Button in Produkt_3 geklickt wird. Jetzt ist die Frage, wie ich es hinbekomme, dass die Zufallszahl in dem Textfeld angezeigt wird?

    Mit dem von mir gewählten <TextBox Text="{Binding Leistung}" Width="80" Height="30"/> funktioniert es nicht.

    Wahrscheinlich wieder mal völlig banal (für die, die´s können), aber ich schaff es einfach nicht. :cursing:
    Eventuell wäre ein Seminar mal hilfreich. Kann da vielleicht jemand einen Anbieter empfehlen, der gute WPF-Seminare für Einsteiger macht? ?(

    Anbei noch das Projekt (Öffnen --> Produkt 3 wählen --> Bild mit Nr. 3 klicken --> Button klicken)

    Danke im voraus!

    Gruß Oli
    Dateien
    • Produkte.zip

      (3,8 MB, 70 mal heruntergeladen, zuletzt: )
    Hallo Dksksm,

    danke für die Antwort. Die Tutorialreihe von NoFear habe ich mir schon mehrfach angesehen und auch schon viele Hinweise für mein Projekt erhalten.

    Ich habe aber auch nicht nach einem Tutorial gefragt, sondern nach einem Seminar. Die Tuts sind ja echt gut, aber wenn vielleicht die ein oder andere Grundlage fehlt und ich, warum auch immer, nicht in der Lage bin das mit den Tuts zu checken, muss ich mich nach anderen Möglichkeiten umsehen. Als "frech" würde ich das nicht bezeichnen. Es ist hier lediglich eine gewisse Unsicherheit, wie ich dem Problem Herr werden kann. Wenn eine Frage dann Frech ist, werde ich in Zukunft überlegen, ob ich eine Frage stellen darf.

    Gruß Oli
    Hallo @BlackTears

    Ja, ich habe dir schon mal meine TutorialReihe ans Herz gelegt. So weit bist du ja auch schon nicht sooo schlecht unterwegs. Aber....

    Du schreibst etwas von der Klasse ReadLV welche das Property enthält. Auf auf dieses ist ja gar nicht gebunden. Soll ja auch nicht, ist ja keine ViewModel Klasse.
    du bindest im DataTemplate für die Klasse Produkt_3 auf dessen Property "Leistung". Warum ist dieses Shared????
    Aber, wie @Dksksm schon schrieb. Ohne INotifyPropertyChanged wirds schwer überhaupt die änderung ins View zu reichen. die View muss ja irgendwie "mitbekommen" das sich der Wert geändert hat und sie ihn nun neu abrufen soll. Sollte das Programm etwas größer werden würde ich aber Model vom ViewModel trennen.

    EDIT: @BlackTears ich glaube nicht das @Dksksm da so gemeint hat, kahm vieleicht falsch rüber aber ich denke er hat es eher gut gemeint und wollte den Link Posten falls du die Tutorials noch nicht kennen solltest.
    Bekomm das bitte nicht in den falschen Hals.
    PS: Seminar? Wie sollte sowas aussehen, ich hatte mal einen Livestream - der aber technisch gesehen in die Hose ging, hatte da Serverprobleme. aber sowas könnte ich mir nochmals vorstellen. Sonst wüüste ich nicht was du meinst. "Einzelseminare" mach ich sicher nicht unentgeltlich, das zahlt sich leider nicht aus.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Nofear23m schrieb:

    ich hatte mal einen Livestream

    Einen Livestream wie z.B. auf Youtube. Das finde ich eine sehr coole Idee.
    Wenn du das nochmal machen würdest (wenn keine Serverprobleme auftreten) fände ich es echt gut, da kann man bestimmt viel lernen. Ich denke man wird dann auch Fragen während dem Stream stellen können, wenn man eine Stelle nicht ganz genau versteht.

    Viele Grüße
    Florian
    ----

    WebApps mit C#: Blazor
    Hallo @BlackTears Da habe ich dich dann halt Missverstanden. Seminar habe ich mit Tutorial gleichgesetzt. Ich kann den Frust auch gut nachvollziehen, denn bis auf das Tutorial habe ich bisher selbst auch nur winzig kleine Strohhalme gefunden, die sich nutzen liessen. Und dabei kommt etwas, was WPF auszeichnet ins Spiel, was die ganze Sache verschlimmert. Es gibt einfach viel Wege die nach Rom führen, aber die muss man auch verstehen.
    Somit kann man sich nicht wie bei WinForm einfach mal hier oder da eine Funktion raussuchen und damit dann WPF zum Laufen bringen. Zumindest nicht, wenn es mit dem View oder ViewModel zu tun hat.

    An dieser Stelle nochmals meinen Dank an @Nofear23m, ohne dessen Unterstützung (Tutorial und direkt) mein erneuter Einstieg in WPF gar nicht erst stattgefunden hätte.
    Ja, genau. Es gibt dann einen LiveChat auf der Seite wo man Fragen stellen kann während ich was mache und ich kann dann darauf eingehen. Müsste ich nur sehen wie ich das hinbekomme da ich im Moment keine sooo schnelle Leitung habe was den Upload betrifft. Aber nur wenn sich ein paar melden würden.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hi Sascha,

    ja , Du hast recht. Ich möchte auf die Property Leistung in Produkt_3 binden. Das habe ich auf Shared gesetzt, weil ich damit in der Klasse ReadVL darauf zugreifen möchte. Dummerweise habe ich in der ReadVL auch den Namen "Leistung" gebraucht, das ist etwas unglücklich. Auf jeden Fall habe ich in der ReadVL auch die Property Leistung und wollte eben, sobald etwas aus einer Datei gelesen wird oder wie in diesem Fall, wenn sich die Property Leistung in ReadVL ändert, das sich auch die Property in Produkt_3 ändert und diese an die Textbox binden.

    Das mit dem PropertyChanged hatten wir schonmal.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. ​Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
    2. Protected Overridable Sub RaisePropertyChanged(<CallerMemberName> Optional ByVal prop As String = "")
    3. RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(prop))
    4. End Sub


    Ich versuch das mal umzusetzen.

    Das mit dem Seminar: Ich habe im Netz mal nach Anbietern für solche Seminare geschaut, bin aber eben nicht sicher welches da was taugt. Deshalb die Frage, ob da jemand schon Erfahrungen hat und eventuell (wenn das erlaubt ist) einen Anbieter weiterempfehlen kann.

    Gruß Oli
    Ich habe noch kein Seminar, oder auch nicht wirklich ein Buch (in deutsch) gesehen welches praxisorientiert war. Zumindest nicht im Bereich WPF. Leider. ich verstehe es auch nicht wirklich, aber es ist nun mal so.
    Das ist/war ja auch der Grund warum ich die Tutorialreihe angefangen habe.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hi,

    irgendwie bekomm ich das nicht hin. Die ReadLV erzeugt die Zufallszahl und soll dann die Property ​Leistung in der Klasse ​Produkt_3 ändern. Deshalb ist die auch shared, wusste nicht wie ich es anders machen soll. Das PropertyChanged-Event in der ReadLV bringt nix, eigentlich müsste ich doch in der Klasse Produkt_3 das Event feuern, weil ich ja auch auf das Property in dieser Klasse binde. Wenn das aber Shared deklariert ist, gekomme ich immer diese Meldung:
    Auf einen Instanzmember einer Klasse kann nicht ohne explizite Instanz einer Klasse von einer/m freigegebenen Methode/Member aus verwiesen werden.

    Wie komm ich da raus?

    Gruß Oli

    BlackTears schrieb:

    Deshalb ist die auch shared, wusste nicht wie ich es anders machen soll.

    Etwas als Shared zu deklarieren ist nicht des Rätsels lösung. Spätestens an dieser Stelle weis ich dann das ich ein Architektur-Design Problem habe.

    BlackTears schrieb:

    Das PropertyChanged-Event in der ReadLV bringt nix, eigentlich müsste ich doch in der Klasse Produkt_3 das Event feuern

    Ich habe auch geschrieben das in die Klasse ReadLv nichts der gleichen rein soll. Das ist keine ViewModel-Klasse. Die soll sowas auch gar nicht abhandeln.

    Als erstes solltest du dir mal eine ViewModel-Basisklasse erstellen wo die InotifyPropertyChanged implementiert ist. alle ViewModel Klassen erben von dieser.

    Ich habe das Beispiel mal adaptiert. Testen kann ichs nicht da ich kein Testfile für das ReadLv habe. Haste ja keines dazu gegeben.
    Ich habe es so gemacht das ich den Instanzen von Product_3 die Instanz von ReadLv übergebe.

    VB.NET-Quellcode

    1. Produktliste.Where(Function(x) x.GetType Is GetType(Produkt_3)).ToList.ForEach(Sub(x) DirectCast(x, Produkt_3).ReadLv = DateiEinlesen)


    So hat diese Zugriff auf die ReadLv und kann einen Handler auf ein Event in ReadLv setzen. Dieses Event (welches ich erstellt habe) wird geworfen wenn sich der Wert ändert. das bekommt nun das ViewModel (von Produkt_3) mit und das Property Leistung wird neu gesetzt. Klingt komplizierter als es ist.

    Grüße
    Sascha
    Dateien
    • Produkte.zip

      (3,32 MB, 58 mal heruntergeladen, zuletzt: )
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Nofear23m“ ()

    Achja, noch was.

    Bitte mach die Felder zu den Properties nicht Public.

    VB.NET-Quellcode

    1. Private _test as String
    2. Public Property Test as string
    3. Get
    4. Return _test
    5. End Get
    6. Set
    7. _test = value
    8. RaisePropertyChanged()
    9. End Set
    10. End Property


    Hier ist das _test private.

    Tipp: Tippe im Editor einfach property und drück dann 2 x TAB. VS erstellt dir nun ein Grundgerüst welches du nur "ausfüllen" musst.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hab mir das mal kurz angeschaut.

    Nofear23m schrieb:

    Ich habe das Beispiel mal adaptiert. Testen kann ichs nicht da ich kein Testfile für das ReadLv habe. Haste ja keines dazu gegeben.

    Du brauchst, wenn ich's richtig verstanden habe, aktuell noch keine Daten, er hat ja zum testen den Zufallszahlgenerator genommen.
    Um des Produkt 3 zu öffnen muss man diese CheckBox auswählen.

    Ich hab's mal ausprobiert und es funktioniert aber immer noch nicht. (Als Info für Nofear23M)

    Sind die Klassen "Produkt_1" "Produkt_2" "Produkt_3" bei dir ViewModels?
    Weil ich verstehe den Aufbau von dem Projekt noch nicht ganz.

    Viele Grüße
    Florian
    ----

    WebApps mit C#: Blazor
    Oh, danke Florian.

    OK, man muss es auswählen und dann auf den großen Button Drücken.
    Dort dann auf Zufallszahl.

    Habe meine Methode aktualisiert:

    VB.NET-Quellcode

    1. Produktliste.Where(Function(x) x.GetType Is GetType(Produkt_3)).ToList.ForEach(Sub(x)
    2. DirectCast(x, Produkt_3).ReadLv = DateiEinlesen
    3. DirectCast(x, Produkt_3).Leistung = DateiEinlesen.Leistung
    4. End Sub)


    Aber das finde ich keine gute Lösung.
    Man merkt eben das der Aufbau nicht passt.

    Interessant wäre es wirklich mal (dieses "Projekt" sehe ich ja jetzt hier nicht zum ersten mal) zu erfahren was das werden soll wenn es denn fertig ist.
    Irgendwie glaube ich das das alles viieeeel einfacher ginge was BlackTears da vor hat. Ich weis schon. Solche konstrukte passieren nun mal wenn ein Projekt wächst ohne das von Anfang an klar was was man wirklich genau benötigt. Gerade wenn man MVVM oder MVVM Ähnliche Kontrukte beginnt ist extrem wichtig das der Aufbau der anwendung klar definiert ist. Hier Hilft ein Lastenheft echt ungemein.

    @BlackTears Beschreibe mal in ein paar Worten was genau das werden soll und wofür. Vieleicht noch eine skizze des UI und eine kleine Erklährung vom UX und vieleicht sparst du dir in Zukunft viiieeeele Nerven.
    Kann sein das es eh nicht besser geht, aber ich denke ein versuch ist es wert. wir wollen ja auch nicht das du die Lust an der WPF verlierst nur weil du dich gleich am Anfang verläufst.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hi Sascha, hi Flori,

    hm, jaaaaa. UI! UX! Ich schau mal ob ich´s hinbringe:

    Im Endeffekt soll eine Anlage kalkuliert werden. Die Anlage besteht aus verschiedenen Produkten, die der User mit Hilfe der Checkboxen (ObservableCollection Checkboxliste) an- oder abwählen kann. Zu jedem gewählten Produkt soll ein Tab in der TabControl erstellt werden. Der Inhalt des jeweiligen Tabs ist von Produkt zu Produkt unterschiedlich (Button, Textboxen, evtl. untergeordnete Fenster, ...). Hier kann der User dann Optionen dazu oder wegschalten oder auch eine Datei einlesen, die gewisse Werte enthält (bei unterschiedlichen Produkten unterschiedliche Dateien). Diese Werte werden dann in Textboxen innerhalb des Tabs sozusagen als Default dargestellt und können bei Bedarf überschrieben werden. Letztendlich soll dann für jedes Produkt eine Kalkulation auf dem Tab erstellt werden. Unterhalb des TabControls wird es noch eine Übersicht über alle Kalkulationen geben, mit der Möglichkeit, die Daten auch zu drucken. Das ganze Design ist auch nicht final und kann sich immer noch ändern. Ist eben abhängig von einigen anderen Stellen.



    Ich denke mein Aufbau wird garantiert nicht passen, da ich zwar so ein Fernstudium für VB belegt habe, aber WPF da nur am Rande behandelt wurde, von MVVM war da gar keine Rede. Meine Programmiererfahrung im Allgemeinen ist auch eher noch auf dem Level Anfänger. Es kommt da zwar was raus, aber sauber programmieren ist das wohl eher nicht. Aber man wächst ja mit seinen Aufgaben 8| ( 5,- € für´s Phrasenschwein ^^ ). Eventuell ist das Projekt im Moment auch zu Umfangreich für mich. Die Überlegung ist auch, das ganze in WinForm auszuführen, weil meine Kollegen bisher auch ausschließlich in WinForm programmieren und mir bei WPF nicht weiterhelfen können.

    Ich nehme gerne jede Hilfe an, möchte aber auch Eure Geduld nicht über die Maßen strapazieren. Deshalb auch die Frage nach einem vernünftigen Seminar, damit Ihr Euch nicht mit "Grundlagen beibringen" abtun müsst. Die Tuts sind echt stark und haben auch schon geholfen. Aber irgendwie habe ich das Gefühl, das mir der "Gesamtüberblick" fehlt. Irgendwann wird der Groschen schon fallen. :thumbsup:

    Bis dahin!

    Gruß Oli
    Hallo

    Ich versuche das mal zu Ordnen

    BlackTears schrieb:

    Deshalb auch die Frage nach einem vernünftigen Seminar, damit Ihr Euch nicht mit "Grundlagen beibringen" abtun müsst.

    Naja, ich würde an deiner Stelle jetzt nicht unbedingt so tief stapeln. Das hat mit "Grundlagen" nicht mehr viel zu tun, das gehts definitiv schon weiter. Das ist fast schon MVVM. nicht ganz aber fast.

    BlackTears schrieb:

    Im Endeffekt soll eine Anlage kalkuliert werden.

    Kannst du "Anlage" genauer definieren?

    BlackTears schrieb:

    Die Anlage besteht aus verschiedenen Produkten, die der User mit Hilfe der Checkboxen (ObservableCollection Checkboxliste) an- oder abwählen kann.

    sind das nur eine Hand voll Produkte? Wenn nicht oder wenn da nocht welche hinzukommen können würde ich das ja anders machen. z.b. mit eine ListBox und einem suchfeld zum Filtern wo man sich die Podukte raussucht. Oder noch besser mit einem Dialog.

    Aber auch wenn es X Produkte gibt welche unterschiedliche Parameter habe, ist es schon so das es eine fixe anzahl von Produktarten gibt oder?
    z.b. sind ein Cola und ein Bier beides Getränke. OK beide haben verschiedene Farben und eines davon ist Alkoholfrei aber beides sind Getränke.

    BlackTears schrieb:

    Hier kann der User dann Optionen dazu oder wegschalten oder auch eine Datei einlesen, die gewisse Werte enthält (bei unterschiedlichen Produkten unterschiedliche Dateien). Diese Werte werden dann in Textboxen innerhalb des Tabs sozusagen als Default dargestellt und können bei Bedarf überschrieben werden.

    Wieder das selbe. Habe ich eine Produktart welche als Logik festgelegt hat eine Datei zu laden. Zwei Produkte sind also von der selben Produktart. Die Produktart bestimmt das jedes Produkt dieser Produktart eine Datei laden soll durch dessen Inhalt z.b. Properties mit werten befüllt werden. Habe ich das richtig verstanden?

    BlackTears schrieb:

    Letztendlich soll dann für jedes Produkt eine Kalkulation auf dem Tab erstellt werden.

    die Kalkulation ist für alle gleich oder gibt es hier auch verschiedene Kalkulationsarten? Ne oder?

    Achja, was helfen würde. Hast du Beispielprodukte und eine Beispielkalkulation? das würde sicher zu einem besseren verständnis beitragen. Zumindest bei solch einem eher komplizierterem unterfangen.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hi Sascha,

    Kannst du "Anlage" genauer definieren?​


    Ich versuchs mal. Anlage ist vielleicht nicht der richtige Ausdruck. Mit meinen Produkten meine ich im Endeffekt die von Dir beschriebenen Produktarten. Die haben erstmal nix miteinander zu tun. Es gibt im Moment 10 Produktarten. Es kann sein, dass im Laufe der Jahre noch welche dazu kommen. Für Jetzt aber eher unwahrscheinlich.

    Jede Produktart hat fixe Komponenten, die immer dabei sind. Dazu kommen gewisse Optionen. Für einzelnen Komponenten gibt es, sagen wir mal, Datenblätter. Daraus brauche ich einige Werte, um das sauber kalkulieren zu können. Die will aber ja nicht immer abtippen sondern aus einer Datei einlesen. Andere Komponenten haben keine Datenblätter, sondern je nach ausgewähltem Typ etwa einen Festpreis.

    Als Beispiel vielleicht das: Ein Elektrogeschäft kann alles mögliche liefern, Staubsauger, PC´s, Kopfhörer, usw. Beim Staubsauger gibt es als Option mit Akku oder kabelgebunden und dann vielleicht noch beutellos oder mit Beutel. Sind diese Auswahlen erfolgt fällt ein Preis raus (ganz einfach erstmal). So, bei der nächsten Produktart PC gibt es da schon mehr. Fix ist z.B. ein Prozessor, sonst läuft das nix. Ebenso ein Mainboard und meinetwegen noch ein Netzteil. Das Datenblatt des Prozessors möchte ich einlesen und gewisse Daten darstellen, die den Preis beeinflussen, aber änderbar sind. Das Mainboard ist dann abhängig von dem Prozessor und für das Netzteil kommt dann ein Vorschlag, welches gut wäre. Als Option denkbar wäre hier ein Gehäuse, dessen Größe nach den vorher festgelegten Komponenten vorgeschlagen aber wieder änderbar ist. Die nächste Produktart (hier der Kopfhörer) hat als Option lediglich die Farbe (weil es nur einen Typ gibt). Jede Produktart wirft eine eigene Kalkulation aus. Diese Einzelkalkus sind aber dann "außen" nochmals aufgelistet und ich kann dem Kunden ein Gesamtangebot geben.

    Dann gibt es noch den Fall, das gewisse Optionen (z.B. der Prozessor) in verschiedenen Produktarten beinhaltet sein können (z.B. Produktart Mobiltelefon beinhaltet ebenfalls einen Prozessor).

    Die Kalkulationsart ist für alle Produktarten die gleiche.

    Mir ist schon klar, dass ich im Logikbereich viele einzelne Klassen benötige, um das abbilden (und auch wiederverwenden) zu können. Ebenso im UI Bereich, da geht ja eine Menge mit den Templates und so. Nur hab ich ganz arge Schwierigkeiten mit der Struktur des Projekts (MVVM), sowie mit dem Binding. Das ist mir noch immer nicht ganz klar.

    Das Aussehen ist so gewünscht, also die Auswahl mit den Checkboxen und die einzelnen Tabs. Das Design der Tabs muss ich noch klären, aber grob als Vorstellung gibt es drei Spalten. Spalte 1 Beschreibung, Spalte 2 Dropdown-Felder oder Checkboxen oder Textboxen o. ä. (zur Auswahl der evtl . benötigten Optionen) und Spalte 3 mit den Preisen. Mal ganz grob.

    Ich stelle mir jetzt die Frage, ob die angefangene Struktur so bleiben kann oder grundsätzlich geändert werden muss. Da fehlt mir die Erfahrung. Was sagen die Experten? Nicht, dass dann mal sowas rauskommt, wie in dem Bild! 8o



    Gruß Oli

    BlackTears schrieb:

    Es kann sein, dass im Laufe der Jahre noch welche dazu kommen. Für Jetzt aber eher unwahrscheinlich.

    OK, und da fängt es an das sich in meinem Körper gerade alle Muskeln verkrampfen. Uhhhhh. OK, Geht wieder.
    Die Frage ist eben, wenn da was dazukommt (für jede Produktart benötigst du ja eine Klasse und ein DataTemplate) - willst du dann wirklich die App neu anpassen und kompilieren?

    Wie gut soll das ganze werden.

    1. Möglichkeit: du bleibst bei den Klassen und DateTemplate un dpasst es an wenn eine Produktart hinzukommt.
    2. Möglichkeit: Du erstellst ein Pluginsystem (ist unter WPF gar nicht schwer). Das ist auch Flexibel genug und du hast jedes Plugin sowohl von der Logik her als auch vom Datenabruf und dem View her komplett getrennt und hast für jedes Plugin ein eigenes Projekt in der Projektmappe. Die übersichtlichkeit ist also auch gegeben. Einzig auf ein paar dinge muss geachtet werden.

    Ich gehe nun mal davon aus das es kein Beispiel gibt. Also kein Excel-File und/oder einen Screenshot eines bestehenden Programms?
    Das die Kalkulationen immer die gleichen sind ist schon mal gut.

    Einzig das mit den checkboxen würde ich anders machen, aber gut, das ist Geschmacksache aber sonst kann man einiges von deiner Struktur hernehmen. Ich würde aber vermutlich (wenn jede Produktart eine völig andere Logic haben könnte) zu einem Pluginsystem greifen.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hallo, dann melde ich mich auch nochmal.

    Nofear23m schrieb:

    Du erstellst ein Pluginsystem (ist unter WPF gar nicht schwer)

    Ein PluginSystem?
    Ist das von der Art her so, dass du in der "Hauptanwendung" eine "Plugindatei" auswählst und dann z.B. weitere Views mit ViewModels und Funktion zu deinem Programm hinzugefügt werden?

    Also mich würde das echt interessieren wie das vom groben Prinzip her geht und was zu beachten ist.

    Viele Grüße
    Florian
    ----

    WebApps mit C#: Blazor
    Poahh, Pluginsystem, Wieder was neues. Geistig bin ich da glaub ich momentan überfordert. Ich muss mal bei uns intern abstimmen wie wir da weitermachen wollen. Vielleicht ist das Projekt in dieser Größe für Neueinsteiger in WPF einfach nix. Da muss man den Tatsachen auch mal ins Auge sehen (Stichwort Phrasenschwein).

    Ich kann mir noch vorstellen das ganze zwar mit WPF, aber nicht MVVM-Konform zu lösen. Also nicht mit Binding und so arbeiten. Das bring ich noch hin, erzeugt aber bei Dir wahrscheinlich den nächsten Muskelkrampf. Wie beschrieben wäre die andere Denkweise, das mittels WinForm zu machen, da es hier Erfahrung im Haus gibt.

    Ich seh mich mal um, ob ich ein kleineres Projekt finde (z.B. ein kleines Berechnungsprogramm), das ich mit MVVM und WPF abbilden kann. Ohne so kompliziertes Checboxen - und TabControl-Zeugs :D .

    Erstmal vielen, vielen Dank für Deine Mühe. Ich werde WPF nicht aufgeben, muss aber auch mal was liefern.

    Bis dahin

    Gruß

    Oli