Support, Anregungen, Wünsche zur Tutorialreihe <WPF lernen/>

  • WPF MVVM

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

    Was ist bitte eine WPF-Klasse? Sowas gibt es nicht, nicht im Net.Framework und nicht in Net.Core (oder "nur" NET).
    Meine class RelayCommand ist im Namespace ViewModel, wie auch mein ViewModelBase als auch mein MainViewModel und andere "Worker"-Klassen.
    Allerdings rede ich nicht vom Projekt in dieser Anleitung. Trotzdem weiß ich nicht, was du meinst mit WPF-Klasse.
    Ich verstehe dein Problem, das gleiche hatte ich auch.

    Das Problem ist, dass die CommandManager Klasse im Namespace System.Windows.Input liegt, allerdings nicht im reinen .Net (Core) Framework, da dieses ja Plattformunabhänig ist und der CommandManager eine reine WPF (und somit Windows) spezifische Klasse ist.

    Gelöst habe ich es, in dem ich den Typ des ViewModel-Projekts so eingestellt habe, dass er auch "Windowseigene" Klassen nutzt. Man nimmt halt in Kauf, dass das ViewModel-Projekt jetzt nicht mehr auf jeder Plattform wiederverwendet werden kann, allerdings gäbe das ja auch wenig Sinn. Und die Funktion das ViewModel zu testen bleibt erhalten, weil das ViewModel ja weiterhin von dem View-Layer getrennt ist.

    Wie muss man vorgehen?

    Die Projektdatei einer normale Klassenbibiliothek, wie es das ViewModel ja ist, sieht unter .Net 5 so aus:

    XML-Quellcode

    1. <Project Sdk="Microsoft.NET.Sdk">
    2. <PropertyGroup>
    3. <TargetFramework>net5.0</TargetFramework>
    4. </PropertyGroup>
    5. </Project>


    Nun muss man folgende Anpassungen vornehmen:

    XML-Quellcode

    1. <Project Sdk="Microsoft.NET.Sdk">
    2. <PropertyGroup>
    3. <TargetFramework>net5.0-windows</TargetFramework>
    4. <UseWpf>true</UseWpf>
    5. </PropertyGroup>
    6. </Project>


    Die Datei kann man bearbeiten, indem man auf das Projekt rechtsklickt und im Kontextmenü "Projektdatei bearbeiten" auswählt.


    ---

    Das ist mein Weg, wie ich das Problem umgehe - keine Ahnung, ob das das Beste ist. Weiß auch nicht, ob meine "Erklärungen" oben alle so stimmen.

    PS: Es gibt meines Wissens auch andere Implementierungen der RelayCommand-Klasse, die keinen CommandManager benötigen, aber da kenne ich mich nicht näher aus.

    Grüße Florian
    ----

    WebApps mit C#: Blazor
    Hallo

    Ok, du meinst WPF Klassenbibliothek, ja, aber die wollen wir ja nicht.

    Im nächsten Teil wäre ich auch genau auf das eingegangen und hätte/werde genau das Vorgehen von Florian zeigen, denn das ist das in meinen Augen vernünftigste vorgehen.

    Und ja, es gibt keine WPF Klassen, eir wissen aber was du meinst.

    @Dksksm
    Du arbeitest vermutlich unter .Net Framework, da kann man die RelayCommand Klasse ganz normal nutzen inkl. CommandManager.

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

    Ingrid… :)
    Ok mag ich mich vielleicht falsch ausgedrückt haben. Ich dachte mir bei einer normalen Klassenbibliothek redet man einfach von Klassen und bei der WPF-Klassenbibliothek halt von WPF Klassen. Es scheint da ja einen gewissen Unterschied zu geben, deswegen meine Annahme.
    Rechtschreibfehler betonen den künstlerischen Charakter des Autors.

    Akanel schrieb:

    Es scheint da ja einen gewissen Unterschied zu geben

    Das kann durchaus verwirrend sein, aber tatsächlich gibt es keinen Unterschied in der kompilierung oder den Klassen selbst.

    Der Unterschied zwischen den Vorlagen "Klassenbiliothek" und "WPF Klassenbibliothek" ist lediglich das für das Template weitere Verweise eingebunden werden welche Praktisch sind wenn man in dem Projekt Controls und andere WPF Spezifische Dinge verwenden will. Da wir bei MVVM aber eine strikte Trennung haben möchten benötigen wird diese Verweise nicht - mehr noch, wir wollen diese vermeiden.

    Ansonsten gibt es keinen Unterschied soweit ich das sehe.

    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 Leute

    Ich werde heute Abend und Sonntag etwas auf Discord Online sein. Wenn ihr Lust habt können wir gerne über WPF, .Net 5, Blazor, Binding und MVVM plaudern.
    Schaut vorbei!

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

    Man findet mich "nur" im offiziellen VB-Paradise Discord Channel. Dort musst du dich mal freischalten lassen. Da gibts nen thread hier.
    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, ich weis, mit dem Tutorial geht es leider nicht gut weiter, dennoch bin ich heute ab ca. 18 Uhr in Discord-Kanal und mache einen Stream für alle die generelle Fragen zu MVVM, Binding, Commands und DataTemplates usw haben.

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

    AUFRUF!

    Ich bin übrigens noch immer auf der Suche nach jemandem der mir ein wenig Tipparbeit abnimmt damit die Tutorialreihe mal ein wenig vorankommt.
    Ich bleibe bei dem Konzept das die Videos und die Kapitel an sich kürzer gehalten werden und einzelnen die Schritte kleiner sind.

    Dennoch würde ich Hilfe benötigen den PDF Text und die Screenshots zu den jeweiligen Kapiteln zu erstellen.
    Den Forumsbeitrag kann ich dann mittels Copy&Paste rasch Formatieren, aber mir Fehlt leider die Zeit hier die Texte zu verfassen.

    Falls sich jemand melden möchte würde ich mich wirklich sehr freuen, bitte per PN. Danke im Voraus und einen schönen Feiertag.

    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 Leute

    Kapitel 6.1 ist Online. :thumbsup:
    Ist kein besonderes, aber dennoch.

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

    Und Kapitel 6.2 ist Online.
    einen großen Dank an @Akanel für die Aufbereitung der Texte und der Formatierung sowohl im PDF, als auch im Forumseditor. :thumbsup:

    Das nächste Kapitel steht bereits in den Startlöchern, also brav liken und das Video gucken, dann ist auch die Motivation groß genug das wir nun schwung rein bringen.
    Jetzt wirds ja dann bald richtig interessant.

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

    Und Kapitel 6.3 ist Online.
    einen großen Dank an @Akanel für die Aufbereitung der Texte und der Formatierung sowohl im PDF, als auch im Forumseditor. :thumbsup:

    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.

    RelayCommand-Oh halt! RelayCommando-Links, und Marsch... ;)

    Danke für das Video.

    Ein kleine Frage, bitte schön, hätt ich da noch...

    Wo, wie , wann... kann ich denn den CommandManager selber Implementieren?

    Es muss auch kein Video werden, nur so mal Pauedo-Code oder ´ne Serviette mit Skizze. Geht auch. ;)

    An @Akanel: Danke das du "DemFurchtlosen" hilfts. Alle drei Daumen hoch.

    :P :D :thumbsup:

    #Akanel_and_the_Fearless_the_Movie-II

    c.u. Joshi

    Joshi schrieb:

    Wo, wie , wann... kann ich denn den CommandManager selber Implementieren?

    Was genau meinst du damit. Willst du einen CommandManager selbst bauen oder geht es dir darum keine Abhängigkeit zu haben. Wenn letzteres, dann gibt es diverse Ansätze im Netz welche aber meiner Meinung nach nicht so lässig zu verwenden sind wie der original CommandManager, und da eine WPF Anwendung ja ohnehin nur unter Windows funktioniert bleibe ich bei diesem Beispiel man beim "originalen".

    Ich selbst habe noch keinen CommandManager selbst implementiert da ich keine Grund für mich sehe.

    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.

    Puhh... nochmal davon gekommen, dachte es muss selbahh implementiert werden... :)

    Nofear23m schrieb:

    dann gibt es diverse Ansätze im Netz welche aber meiner Meinung nach nicht so lässig zu verwenden


    Ach weist du... Wenn ich so mal darüber... Öhh?! Nee so jetzt...

    WPF langt mir vollkommen und .NET ohne Windows ist eh nur (der) REST (von ´ner) API.

    Danke für die schnell Antwort.

    Ich bin schon gespannt auf die Services.

    Frage: Wie setzt du für gewöhnlich inter ViewModel-Kommunikation? mittels Messanger-Pattern.

    Danke wie immah, Joshi aus da Hood. ;)

    Joshi schrieb:

    Wie setzt du für gewöhnlich inter ViewModel-Kommunikation? mittels Messanger-Pattern.

    Sorry, da musst du auch wieder ausholen was genau du meinst.
    Ich hatte früher mal mit Messages gearbeitet, aber für mich persönlich haben im Grunde die Services die Messages abgelöst. Ich kann mit den Services im Grunde alles lösen.

    Und im Grunde bauen die Messages ja auf ein Service auf.

    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.

    anpeilen, fixieren, ausholen...

    Ich hatte einmal die Situation, das ich ViewModels mit Funktionen, die bei Ereignissen in einem, zu anderen ViewModels, Abhängigkeiten hatten.

    Wenn in einem ViewModel ein Zustand geändert wurde, wurde eine andere Darstellung im anhöngigem ViewModel abgebildet.
    Das war ja auch einfach, aber der Rückweg machte Probleme.

    Das war per se(h) ein Designfehler.

    Darum fragte ich wegen der Service(s) bzw. InterViewModel-Kommunikation.

    Die erste Lösung war mit einfachen Events in beiden VieModels, die natürlich die MVVM-Doktrin "Violataten".
    (Sith. Es sind immer zwei...)

    Danach stolperte ich über eine Messenger Lösung. Die mir in vielen Projekten geholfen hat.

    Kurzes Beispiel: Settings-ViewModel bekommt Meldung, ob Einstellungen in anderen Modulen/ViewModels gesetzt wurden und lösen ein schreiben der Einstellungsdatei aus.

    Ich gehe davon aus, das dein Video über Services einen neuen "Ansatz" liefert.

    Freue mich schon wie Bolle. (Norddeutsches Sprichwort) :)

    Kleine Anmerkung zu der Video Qualität. Das Video wird als Full-HD "gelistet", es ist schwer leserlich. Ich habe auch etwas später das Video angschaut, wegen der "YouTube-Konvertieungszeit", hat aber keine Verbesserung gezeigt.

    Nach dem ersten Kaffee, hab ich alle wieder lieb... piep piep piep
    Du bist der Besteste NoFear23. EVER! ;)

    c.u. Joshi