WPF-Projekt [LRPC]

  • WPF

Es gibt 111 Antworten in diesem Thema. Der letzte Beitrag () ist von MichaHo.

    Gehen wir weiter. Man fängt immer beim Model an. Wie würdest du nun das Model erstellen? Modelklassen wollten immer POCO Klassen sein. (PlainOldClassObject)

    hm, naja im Prinzip, würde ich die Productklasse so benutzen wie im oben angehängten Projekt, nur halt dann ohne GET/SET da die RaisePropertyChanged im reinen Model ja augenscheinlich nichts verloren hat, schrieb @flori2212 in post 6.
    Da alle Zahlenwerte als Decimal ausreichen (wobei ich mir nicht sicher bin, ob dies auch für "HoursOfCheck" gilt und für RentsUntilMaintenance , da könnte evtl. Double besser geeignet sein, da es sich hierbei ja nicht um Geldbeträge handelt ?)
    Sowohl die Länge des Namens als auch die Länge eines zum Produkt gehörenden Kommentars, müssen hier denke, ich mal nicht beschränkt werden. Zumindest würde mir kein Grund einfallen warum dies Sinn machen würde.


    Wenn ich mir dein "altes" Projekt so ansehe denke ich du benötigst drei Klassen welche alle als Serializable gekennzeichnet werden müssen. Prudukt, Result (wobei ich den Namen schlecht finde wäre hier "Offer" für Angebot nicht besser?) und Settings. Ist das richtig?


    Ok dazu erstmal eine kleine gegenfrage, verwendet man unter WPF denn die My.Settings nicht mehr ? oder warum soll für die Settings eine eigene Klasse her ?
    Man könnte es durchaus auch Offer nennen, aber ich bin mir hier nicht sicher, da es sich ja um ein Ergebnis der Berechnung handelt, daher wählte ich Result, evtl. dann RentValues ?


    Zeig uns mal wie du dir die drei Klassen vorstellst. Zur Not hier als Code, aber nun müsstest du einen PullRequest auch schon machen können.

    Mache ich sehr gerne, auch gerne bereits über ein PullRequest, allerdings darf ich hier in der Arbeit kein VS auf dem Rechner installieren, und über AnyDesk(RemoteApp) zu schreiben ist oft wegen der Verzögerung sehr "nennen wir es mal" frustrierend. ich bin ab ca. 18:30 zuhause, dann setze ich mich direkt drann, wenn das so ok ist =)
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If

    asusdk schrieb:

    nur halt dann ohne GET/SET da die RaisePropertyChanged im reinen Model ja augenscheinlich nichts verloren hat

    Richtig

    asusdk schrieb:

    "HoursOfCheck" gilt und für RentsUntilMaintenance , da könnte evtl. Double besser geeignet sein

    Wenn du in der Arbeit (dazu komme ich noch ;-)) eh kein VS hast wäre es vieleicht Hilfreich ein paar Worte über das Projekt zu sagen, einfach damit alle bescheid wissen. Ich sehe zwar das es hier um anscheinend Mietverträge von Medizinischen Geräten geht aber mehr auch nicht.

    asusdk schrieb:

    Sowohl die Länge des Namens als auch die Länge eines zum Produkt gehörenden Kommentars, müssen hier denke, ich mal nicht beschränkt werden.

    Achso. Also wenn ich einen 700 Zeichen langen Produktnamen eingebe weil ich grade lustig bin sieht das sowohl in deiner Listbox als auch am "Word-Ausdruck" sicher nicht so tolle aus. ;)

    asusdk schrieb:

    verwendet man unter WPF denn die My.Settings nicht mehr ?

    Doch, können wir auch gerne nehmen, ich mach es meißt nur auch über die Serialisierung, so lass ich mir jeden Spielraum und kann simpel eine Import und Exportfunktion implementieren usw.
    Aber wie du willst, dachte es wäre eine gute Übung das auch gleich selbst zu machen.

    asusdk schrieb:

    Man könnte es durchaus auch Offer nennen, aber ich bin mir hier nicht sicher, da es sich ja um ein Ergebnis der Berechnung handelt

    Oder (ich bin mir eben noch nicht socher was es genau ist) RentalContract für Mietvertrag.
    Result kann eben alle mögliche sein. Du glaubst gar nicht wie unheimlich wichtig Benamsungen sind. Ich mach mit oft wirklich Stundenlang gedanken über Benamsungen.

    asusdk schrieb:

    allerdings darf ich hier in der Arbeit kein VS auf dem Rechner installieren

    Aber das Projekt ist schon für deinen Arbeitgeber oder? Sehe ich das richtig. Ist ja der Hammer. Das bedeutet das dein Arbeitgeber 250 PCs oder 1 Million USD Jahresumsatz hat?
    OK, hat meiner auch, aber die haben mit VS einfach im Abo gekauft. 45$ ist jetzt nicht so viel für ne Firma.

    Aber für kleine Dinge kann man VS Code auch verwenden und das ist kostenlos - auch für Firmen.

    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,

    Nur ein kurzer EInwurf:

    Nofear23m schrieb:

    Die Spire-Bibiliothek haste ja drinnen um Word Dokumente zu erstellen. Gehts/gings hier nur ums drucken? Wenn ja können wir die rausmachen, das geht mit der WPF mit OnBoardmittel. Der Vorteil ist das der Enduser kein Word am Rechner oben haben müsste.


    Es wäre echt schön, wenn in dem Projekt auch noch die Druckumsetzung mit Boardmitteln gezeigt wird, weil das ist echt eine interessante Funktion. (Bestimmt auch für andere, die keine extra Library nutzen wollen)
    Oder in einem extra Thread?

    @asusdk
    Es wäre echt praktisch wenn du dann genau beschreiben könntest, was dein Programm können soll.

    Viele Grüße
    Florian
    ----

    WebApps mit C#: Blazor
    Ok, als zusammenfassung:

    In Programm sollen einige Produkte angelegt werden, hier handelt es sich um Simulatoren für Ärzte, Hebammen Sanitäter und co. (Wer einen Führerschein hat kennt evtl. eines unserer Basis Modelle zum lernen von CPR)
    Anhand des EK-Preises und weiterer Werte, soll errechnet werden, was wir einem Kunden berechnen wenn er sich eines dieser Produkte für einen Zeitraum X ausleiht.

    Anschließend sollen die Werte in die Word-Vorlage übertragen werden. Es wird nicht als PDF gespeichert (daher kann die Spire.PDF.dll wohl raus). Das war es auch schon, mehr ist nicht dahinter.

    Es wäre echt schön, wenn in dem Projekt auch noch die Druckumsetzung mit Boardmitteln gezeigt wird

    Ich wüsste in dem Falle aber nicht was ich davon drucken wollen würde, ich benötige ja im Endeffekt nur die Vorgegebene Word-Datei in ausgefüllter Form.


    Achso. Also wenn ich einen 700 Zeichen langen Produktnamen eingebe weil ich grade lustig bin sieht das sowohl in deiner Listbox als auch am "Word-Ausdruck" sicher nicht so tolle aus.

    gut, das ist natürlich ein schlagkräftiges Argument, das sollte ich dann wohl beachten.

    Doch, können wir auch gerne nehmen, ich mach es meißt nur auch über die Serialisierung, so lass ich mir jeden Spielraum und kann simpel eine Import und Exportfunktion implementieren usw.
    Aber wie du willst, dachte es wäre eine gute Übung das auch gleich selbst zu machen.

    Wenn schon denn schon, dann lege ich hierfür wohl auch eine entsprechende Klasse an.

    Result kann eben alle mögliche sein. Du glaubst gar nicht wie unheimlich wichtig Benamsungen sind. Ich mach mit oft wirklich Stundenlang gedanken über Benamsungen.

    hm, gut das wird mich wohl auch einiges an Zeit Kosten, da mir noch kein "passender" Name eingefallen ist


    Aber das Projekt ist schon für deinen Arbeitgeber oder? Sehe ich das richtig. Ist ja der Hammer. Das bedeutet das dein Arbeitgeber 250 PCs oder 1 Million USD Jahresumsatz hat?

    Ja und Nein, ich habe das Programm für MICH geschrieben, da ich sehr ungerne Dokumente ausfülle. Ich bin chronisch Faul veranlagt. VS ansich wäre von den Finanzen her kein Problem, die Problematik rührt daher, das wir auf unseren Arbeitssystemen ausschließlich Software installieren dürfen die von unserem Mutterkonzern(Norwegen) ins unserem eigenen SoftwareCenter gelistet wird. Und VS sucht man hier leider vergebens.
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If

    asusdk schrieb:

    Es wird nicht als PDF gespeichert (daher kann die Spire.PDF.dll wohl raus). Das war es auch schon, mehr ist nicht dahinter.

    OK, geht mit Boardmitteln alles. Auch PDF falls es mal nötig wird.
    @flori2212 Ohne Word mit reinen Boardmitteln kann auch gedruckt und als PDF glaube ich auch gespeichert werden, aber das müssen wir dann in einem anderen Thread machen.

    asusdk schrieb:

    Und VS sucht man hier leider vergebens.

    Verständlich. Naja, vieleicht geht dein Chef ja mal doch her und kauft dir ein 400€ Laptop welches nicht in der AD des Unternehmens hängt.

    Gut, dann erstelle mal die drei Klassen, das sollte ja kein Problem sein und wir gehen die dann durch. Die drei popeligen Klassen kannst du derweil wenns für dich einfacher ist auch hier Posten und ich übernheme dann die (korrigierte) Version die wir hier besprechen.

    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:


    Aber das Projekt ist schon für deinen Arbeitgeber oder?


    Nofear23m schrieb:


    Aber für kleine Dinge kann man VS Code auch verwenden und das ist kostenlos - auch für Firmen.


    Du darfst niemals davon ausgehen, dass Firmen oder Konzerne sich "vernünftig" in unserem Sinne verhalten. Oft ist Eigeninitiative sogar unerwünscht, weil man könnte ja auch eine Sicherheitslücke schaffen oder sonstwas schlimmes machen. Meine Chefs mussten sogar begründen warum ich, ein kleiner Hansel in einer Tochtergesellschaft ein VS installiert haben möchte. Nach mehr als 3 Jahren privater Programmierung für die Firma habe ich vor ca. 3 Jahren endlich VS 2015 auf den Rechner installiert bekommen. Ich weiß jetzt schon was mir blüht, wenn die Leasing für den Rechner ausläuft, das wird nicht lustig.

    Ums Geld oder die Lizenzen geht es dabei eher gar nicht.
    Ich kenne die problematik sehr gut. Auch ich Arbeite in einem großen Konzern mit Muttergesellschaft in Deutschland und einer eigenen Zweiggesellschaft nur für die EDV! (Die Porsche Informatik)
    Da gibt es auch solche probleme. Da ich einer der glücklichen mit Adminrechten bin hab ichs hier aber leichter. Die lassen mir das durchgehen weil ich noch nie Support benötigt habe.

    Aber sei es wie es sei, kann man eh nix machen. :huh:
    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 Leute.

    Neuer Tag - neues Glück. @asusdk hat gestern noch einen PullRequest erstellt und das Model soweit erstellt.
    Durch hinzufügen eines Verweises auf System.ComponentModel.DataAnnotations ist es ein einfaches Pflichtfelder und andere "Limits" zu definieren und später sicherstellen zu können das der User nicht etwas eingibt was wir so nicht wollen.

    Ein Beispiel ist der Produktpreis. Der User soll hier Beispielsweise keinen Negativen Wert eingeben können, wäre ja Quatsch.

    Ich habe auch wieder etwas Commited
    Gut, und später das ganze nicht mühsam Property für Property abfragen zu müssen habe ich eine Hilfsmethode (oder besser zwei) gebaut welche uns das abnehmen.
    Das diese Methoden Generisch sind müssen wir nicht in jede Modelklasse solch eine Methode packen sondern können diese in die ModelBase packen.

    In der generischen Klasse ModelValidation befindet sich die generische Methode Validate. Diese Methode prüft mithilfe der statischen Methode Validator.TryValidateObject aus dem Namensraum DataAnnotations ob das Objekt Valid ist und speichert evtl. Validierungsfehler in die Variable validationResults. Im Falle eines Fehlers bekommen wir in diesem Fall eine Consolenaufgabe und es wird Nothing zurückgegeben.

    Die statische Methode ValidateEntity aus ModelValidation ist im Grunde nu eine Hilfsmethode.

    Bei Fragen bitte einfach melden.

    Ansonsten machen wir und dann im ViewModel als nächstes eine Klasse zum laden und speichern von Produkten und den Settings.

    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. ##

    Guten Morgen Sascha,

    ich hätte da bereits eine Frage, erstmal noch betreffend der DataAnnotations, da mir aktuell eine Idee fehlt, wie ich diese testen könnte wollte cih mal fragen ob ich anstatt :

    VB.NET-Quellcode

    1. <MinLength(1, ErrorMessage:="ProductName have to be Above {1} characters")>
    2. <MaxLength(100, ErrorMessage:="ProductName have to be below {1} characters")>[b][/b]


    nicht auch folgendes verwenden könnte ?

    VB.NET-Quellcode

    1. <StringLength(100, MinimumLength:=1, ErrorMessage:="ProductName should at least have {2} and not above {1} characters")>


    LG und danke schon mal
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If
    Natürlich kannste. Was dir lieber ist, bleibt ja dir über.

    Überhaupt kein Problem.

    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. ##

    Da du ja dabei was lernen solltest....

    Lese nochmal Post #28 durch. Gehe die zwei Methoden durch und schau mal ob du nicht eine Möglichkeit findest diese zu Test.
    Ein gute Platz zu testen bis es ein UI gibt ist z.b. die Applikation.vb. Dort die Methode für Application_Startup generieren lassen und dort kannste ja mit Debug.WriteLine() eine Konsolenausgabe machen.

    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. ##

    Ein gute Platz zu testen bis es ein UI gibt ist z.b. die Applikation.vb. Dort die Methode für Application_Startup generieren lassen und dort kannste ja mit Debug.WriteLine() eine Konsolenausgabe machen


    meinst du evtl die Application.xaml.vb ? denn eine application.vb scheint nicht vorhanden zu sein. Und was meinst du mit Application_Startup ? einfach eine Sub erstellen ?

    Debug.writeline ist mir bekannt, aber irgendwie müsste ich doch vorher die Produktklasse füllen wie soll das denn Ohne UI gehen ?
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If

    asusdk schrieb:

    meinst du evtl die Application.xaml.vb ?

    Ja, sorry. War nur aus dem Kopf

    asusdk schrieb:

    einfach eine Sub erstellen ?

    Wennst die Klasse offen hast dann oben im mittleren DropDown (Application Ereignisse) wählen und im rechten Dropdown dann Application_Startup und schon wird dir die Methode generiert.

    asusdk schrieb:

    aber irgendwie müsste ich doch vorher die Produktklasse füllen

    Klar. Product ist eine Klasse oder? Wie erstellt man eine Instanz einer Klasse? Das sind Basics der Basics.

    Hast du die Instanz kannst du mit den genannten Methoden diese dann Validieren. Probiers mal. Wenn ichs dir vorgebe lernst es nicht, wenn du draufkommst schon eher.

    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. ##

    Klar. Product ist eine Klasse oder? Wie erstellt man eine Instanz einer Klasse? Das sind Basics der Basics.

    Ja stimmt, da stand ich grad auf dem Schlauch, ich finde allerdings bisher nicht raus wie ich das Validieren anwende ?

    Product.Validate unterstreicht er schonmal...

    und mit Product.isvalid, krieg ich ja nur einen Bool zurück, also nicht die Fehlermeldung ?
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If
    Ist Product in dem Fall denn eine Objektinstanz oder ein Typ?? Nochmal, du musst eine Instanz erstellen.

    Ich glaube jetzt stehst du echt am Schlauch.

    Dim test as New Product vieleicht?
    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. ##

    versucht habe ich es so :

    VB.NET-Quellcode

    1. Private Sub Application_Startup(sender As Object, e As StartupEventArgs) Handles Me.Startup
    2. Dim prd As New Product With {.ProductName = ""}
    3. If Not prd.IsValid Then
    4. Debug.WriteLine("?")
    5. End If
    6. End Sub


    Aber ich komme nicht dahinter was anstelle des "?" hinmuss um an die Errormessage zu gelangen
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If
    Na was für Methoden bekommst du denn in der Intellisens gezigt wenn du Debug.WriteLine(prd.) schreibst?
    Da fällt dir sicher eine Methode (welche ich ja implementiert habe) auf (guck auf den Rückgabewert den dir die Intellisense anzeigt) mit welcher du an die Fehler kommst.

    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. ##

    das einzige was mir auffält wäre prd.Isvalidate und prd.Validate

    prd.validate wird aber rot unterstrichen es sei denn ich importiere wieder dataannotations, in dieser Klasse (gehen die Imports nicht irgendwie ProjektÜbergreifend ?)

    Aber dann erhalte ich sowohl wenn ich nur prd.validate schreibe als auch bei prd.validate to string nur : System.Collections.Generic.List`1[System.ComponentModel.DataAnnotations.ValidationResult]


    und bei:

    VB.NET-Quellcode

    1. Private Sub Application_Startup(sender As Object, e As StartupEventArgs) Handles Me.Startup
    2. Dim prd As New Product With {.ProductName = ""}
    3. If Not prd.IsValid Then
    4. Debug.WriteLine(prd.Validate)
    5. For Each itm As ValidationResult In prd.Validate
    6. Debug.WriteLine(itm)
    7. Next
    8. End If
    9. End Sub


    meckert er, das ValidationResult nicht in ValidationResult konvertiert werden könne
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If

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

    asusdk schrieb:

    meckert er, das ValidationResult nicht in ValidationResult konvertiert werden könne


    Das Problem ist, dass du das "falsche" ValidationResult benutzt.
    Du musst erst einen Verweis auf System.ComponentModel.DataAnnonations hinzufügen.

    Dann funktioniert es, siehe screen:


    Viele Grüße
    Florian
    ----

    WebApps mit C#: Blazor