MVVM Umsetzung

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 37 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Neu

    @VaporiZed

    Erstmal Danke für die Erklärungen und das Übungsprojekt.

    Leider bekomme ich da Fehler. Siehe Bilder

    Habe ganz frisch das .Net nachinstalliert usw...
    Bilder
    • mvvmerror1.jpg

      261,79 kB, 1.136×643, 22 mal angesehen
    • mvvmerror2.jpg

      263,18 kB, 1.213×450, 10 mal angesehen
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    Neu

    @Amelie

    Versuch einfach ein adneres Framework einzustellen. Im Projektmappenexplorer rechtklick auf das Projekt(das mit dem VB Icon in der Mappe), dort dann auf Eigenschaften klicken. Schau dann nach "Zielframework" und stell da was ein. Kannst natürlich mit einem Doppelklick die Datei öffnen, dort musst du aber selbst den Text bearbeiten. Im Zweifel die UI nutzen an die du wie gesagt kommst.
    Bilder
    • Unbenannt.jpg

      63,64 kB, 851×219, 17 mal angesehen
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

    Neu

    Welches Studio?
    Wenn du ein neues Projekt anlegst, kannst du denn da NET auswählen? Dazu musst du aber ein NET Projekt auswählen kein NET-Framework.
    Wenn du kein NET(ohne Framework) ProjektTemplate findest, ist dein Studio evtl. zu alt.
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

    Neu

    Moin moin
    Zur Zeit habe ich VS 2017. Ich hatte erst VS 2019 auf dem neuen Windows 10 aber da hatte ich Probleme.
    Unter anderem konnte ich keine eigenen Usercontrols auf die Form ziehen.
    Der selbe Code des UserControls in VS2017 funktionierte.


    Und wie es scheint, kann VS2017 wohl nur .Net Consolen Anwendungen.???
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    Neu

    Amelie schrieb:

    Und wie es scheint, kann VS2017 wohl nur .Net Consolen Anwendungen
    Quatsch.
    Das hast du sicher die falsche Einstellung erwischt.
    Es gibt z.B. die Projektvorlage Windows-Forms-App (.NET Framework).

    Oder du hast dein Studio so kastriert installiert, dass alles abgewählt wurde.
    Dann starte den Visual Studio Installer und lade den gewünschten Rest nach.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

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

    Neu

    Amelie schrieb:

    Unter anderem konnte ich keine eigenen Usercontrols auf die Form ziehen.


    Installier dir einfach mal das aktuelle Studio -> Visual Studio Community 2022, da funktioniert das mit den Usercontrols. Ich versteh nicht warum du immer noch an den alten Studios festhälst. Fehlt was, startest du den "Installer", da kannste dann alles was du brauchst installieren, auch im Nachhinein.
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

    Neu

    Hallo zusammen.

    Habe das Paket was @ErfinderDesRades genannt hatte schon installiert. Allerdings net.8

    Das VS habe ich nachgesehen und so ziemlich alles installiert was ich so brauche. Das android zeugs usw ...nicht.
    Im Bild ist zu sehen, was ich bei .Net zur Auswahl habe. Bei C# fast identisch.

    Vielleicht mal das Studio komplett installieren?
    Bilder
    • netcor1.jpg

      328,45 kB, 1.065×684, 10 mal angesehen
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    Neu

    .NET Core (das ist .NET bis 3.1, Du brauchst mindestens 7.0) ist genauso falsch wie .NET Standard. Schau mal bei Windows Desktop rein, vielleicht ist es dort.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Neu

    Hallo
    Bin gerade dabei das VS 2022 zu installieren. Dauert ein wenig.

    Obwohl ich .Net 8 installiert hatte war VS2017 nicht dazu zu bewegen etwas derartiges zu zeigen. ;(
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

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

    Neu

    Dein Bild enthält persönliche Daten. Entfern es lieber, wir glauben Dir auch so, dass Du VS22 installierst.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Neu

    @VaporiZed

    Ich habe mal mit deinem Mini Beispiel-Projekt etwas probiert.

    Ich bekomme zwar eine Combobox mit dem Binding hin, aber folgendes:
    Ich sehe im Desinger bei der Auswahl das Binding mit Drives. Wähle ich das aus wird eine weitere Binding: "DrivesBindingSource" erstellt.

    Diese neue hat dann das DataSource ==> "BsViewModel" ==> DataMember "Drives"

    Das kommt mir so "doppeltgemoppelt" vor???

    Aufjedenfall, muss ich da sehr viel umdenken, weil alles so anders ist..
    Bilder
    • comboBindings1.jpg

      120,95 kB, 420×441, 8 mal angesehen
    Dateien
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    Neu

    Amelie schrieb:

    Aufjedenfall, muss ich da sehr viel umdenken, weil alles so anders ist..
    Wie geschrieben, fast alles wäre mit .NET-Framework auch schon möglich gewesen. Dass Du bisher DataBinding noch nicht so genutzt hast, liegt schonmal nicht an .NET. Sondern wahrscheinlich eher daran, dass Du den Thread WinForms Projektentwicklung bzgl. der Rolle des Formulars vielleicht gelesen, aber womöglich noch nicht die einzelnen Stufenprojekte ausprobiert und nachvollzogen hattest ;)
    Aber macht nix. Dann eben jetzt.

    Anbei die Korrektur.

    Amelie schrieb:

    Das kommt mir so "doppeltgemoppelt" vor???
    Das ist aber tatsächlich notwendig. Für ein korrektes DataBinding benötigen Auflistungen eine eigene BindingSource (BS). Allein schon für die BS-Eigenschaften Current und Position. Wie sonst sollte eine Property, die aus mehreren Einträgen besteht (Drives als ObservableCollection) so abgebildet werden, dass der ausgewählte Wert nachvollziehbar ist?
    Weil ich grad beim Thema bin: Ich habe bei der ComboBox noch die Eigenschaft ausgewählter Wert festgelegt. Das erspart Dir den Code, dem Du im MainForm-CodeBehind hattest. Da soll nämlich gar nix stehen ;)
    Das Ärgerliche, was ich auch nochmal @loeffel schreiben werde: Der Designer unterstützt bisher keine Direktauswahl der DataBinding-Eigenschaften, ich musste es in die FrmMain.Designer.vb manuell eintragen :thumbdown:

    Ansonsten habe ich die VmMain.vb noch etwas gekürzt, weil Du die ausführliche Schreibweise der Propertys nicht brauchst. Die einzeilige AutoProperty-Schreibweise reicht, solange Du nix spezielles in den Gettern/Settern machst.
    Dateien
    • MVVM Übung.zip

      (83,6 kB, 4 mal heruntergeladen, zuletzt: )
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Neu

    @VaporiZed

    Habe mich nun mal fast den ganzen tag damit beschäftigt.
    Ist schon eine große Umstellung und viel hinundher wenn so garnix mehr in der Form-Class an Code ist.
    Das schwierigste ist z.B. Contorls zu "formatieren" usw....

    Public Class RelayCommand
    Was die Class so bewirkt ... hmmm noch ein Buch mit 7 ...nee 77 Sieglen :D
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    Neu

    Ich schrieb ja. Nimm sie zur Kenntnis, aber anfänglich solltest Du sie ignorieren. Aber bitte: Die RelayCommand-Klasse ist eine allgemeine Klasse, die das ICommand-Interface implementiert. Damit wird sie für das Button-DataBinding an die Command-Property zugänglich. Eine VmMain-Property, die eine RelayCommand-Klasseninstanz ist, kann also an die Command-Property eines Button gebunden werden. Klar soweit? Also DataBinding geht grundsätzlich nur mit Propertys P und das DataBinding an die Button-Command-Property geht zusätzlich nur, wenn die Property P das ICommand-Interface implementiert. Da im Code steht Property Blablabla As New RelayCommand, sind beide Bedingungen erfüllt: Property und ICommand-Implementierung.

    Was die RelayCommand-Klasse jetzt macht: Dem Konstruktor gibt man die Adresse einer Methode, die dann ausgeführt werden soll, wenn die Execute-Methode des RelayCommands aufgerufen wird. Wann passiert das? Wenn der RelayCommand an einen Button gebunden ist und der Button geklickt wird. Also quasi: »Ich erstelle mir eine VmMain-Property SaveDataRelayCommand vom Typ RelayCommand. Diese Property soll sich mal die Aktion SaveData merken. Wenn der Button, an den ich SaveDataRelayCommand binde, geklickt wird, kümmert sich .NET darum, dass dann automatisch die hinterlegte Aktion SaveData aufgerufen wird.«

    Belassen wir es erstmal dabei. Wenn das sitzt, können wir uns um den Rest der Klasse kümmern. Dein Hauptaugenmerk sollte darin liegen, das Form codefrei zu halten und all Deinen Code in der VmMain-Klasse zu belassen.
    Der spätere Schritt ist natürlich, dass die VmMain-Klasse (ist ja das ViewModel) nicht alles weiß, sondern dass die Modelklassen hinzukommen. Das ViewModel vermittelt ja nur zwischen GUI/View und Modelklassen.

    ##########

    Was meinst Du mit »Controls formatieren«? Das DataBinding einzurichten?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

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