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

  • WPF MVVM

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

    Hallo Leute.

    In meinem letzten Video zu MarkupExtensions hat sich ein Fehler eingeschlichen. Premiere hat mir das wohl nicht richtig Encoded.

    Danke @Akanel für den tollen Hinweis. Da merkt maneben das du dir die Videos auch wirklich ansiehst.

    Unter folgender Adresse ist nun das korrigierte Video, ich habe es in der Beschreibung des Originalen auch verlinkt.


    Beste 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 weiter gehts Leute.

    Attached Properties ;)

    Bei Fragen und/oder Anregungen bzw. Kritik einfach bitte nur melden.

    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

    Wie drei Kapitel Online. Im Moment gibts weniger Videos weil es kleiner Kapitel sind wo ich nicht der Meinung bin das hier Videos erforderlich sind.

    Folgende Kapitel habe ich hinzugefügt:
    • 2.1.8.1 - Die Input-API
    • 2.1.8.2 - Tastatur und Mausklassen
    • 2.1.8.3 - Eventrouting
    Die nächsten Kapitel sind dann:
    • 2.1.8.4 - Touch und Multitouch
    • 2.1.8.5 - Focus (Tastaturfocus und logical Focus)
    • 2.1.8.6 - Commands
    Dem einen oder anderem wird aufgefallen sein das es kleinere Änderungen am Inhaltsverzeichnis gab. Ich hoffe diese waren in euren Interesse.

    Schöne 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

    Und wieder zwei Kapitel online. 8o
    Viel spass beim lesen.
    Beim nächsten Kapitel (Commands) gibts wieder ein Video.

    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 weiter gehts ;)

    2.1.8.6 - Commands

    Diesmal wieder mit nem Video.
    Viel Spaß

    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,
    vorab...wie immer sehr gute und verständliche Videos... :thumbsup:
    Ich hab allerdings eine Frage zu Resourcen... Wie ich Resourcen (Styles zum Beispiel) einbinde, weis ich, das klappt auch.
    Wo ich mir allerdings die Zähne dran ausbeiße sind das einbetten von Fonts und Images.

    Ich hab in meinem Projekt ein View Projekt, hier sind alle benötigten Usercontrols drin, sowie die ganzen Styles, Images, Fonts, Converter, AttachedProperties usw. die benötigt werden.
    Im Main Projekt hab ich einen Verweis auf das View Projekt.

    Die Styles usw. werden auch sauber übernommen, allerdings werden die Images nicht gefunden, die ich zum Beispiel in einem Stackpanel oder TreeView drin habe.
    Muss ich diese Dinge (Images, Fonts) im Hauptprojekt auch anlegen oder wie funktioniert das genau?

    ich hab mal ein TestProjekt angehängt.
    Dateien
    "Hier könnte Ihre Werbung stehen..."
    Hallo @MichaHo

    Da die WPF Vektorbasiert ist empfehle ich Icons immer als solche zu implementieren. Stichwort "Path".
    Hier gibt gute Icon welche direkt in XAML exportiert werden können. Einfach in ein ResourceDictionary packen und gut ists.

    Aber wenns ein Image oder was anderes sein soll mach ich immer folgendes.

    Den Buildvorgang des Images auf "Inhalt" und "Kopieren wenn neuer".


    Den Converter würde ich dann wie folgt abändern:

    C#-Quellcode

    1. return new BitmapImage(new Uri($"{AppDomain.CurrentDomain.BaseDirectory}/Images/{value}.png"));


    Ich hoffe das Hilft dir.

    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

    Und schon wieder was neues. Im Moment läufts wa?

    2.1.8.7 - Die RelayCommand-Klasse

    Grüße und viel Spaß
    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, fleißiges Bienchen :)
    Die Icons direkt im Xaml kenn ich (sogar von Dir).mein Problem dabei ist, das ich dann nicht wüsste, wie ich den Converter umgestalte damit er auf die Icons in der Icon.xaml zugreift. Die Icons sind ja abhängig von einem Property im ViewModel, bzw. von einem Enum im Model, Daher die Icons als Image in einem Ordner.

    Hmm, wobei, müsste das nochmal testen, bei meinem WindowMaximize Button hab ich was ähnliches gemacht.... Ich schau nochmal...
    "Hier könnte Ihre Werbung stehen..."

    Nofear23m schrieb:

    2.1.8.7 - Die RelayCommand-Klasse

    Das war das Tutorial auf das ich so lange gewartet habe, weil ich es einfach nicht verstanden habe. Vielen vielen Dank dafür :thumbsup:

    Nofear23m schrieb:

    Im Moment läufts wa?

    Das sehe ich sehr gerne.
    Ich freue mich schon auf das Telefonbuch im MVVM Stil.

    Viele Grüße
    Florian
    ----

    WebApps mit C#: Blazor

    flori2212 schrieb:

    Ich freue mich schon auf das Telefonbuch im MVVM Stil.

    Das wird noch dauern. Zurest wird das Telefonbuch mit CodeBehind gemacht.

    Wie findet Ihr das übrigens? Macht es sinn das wir es zuerst mit CodeBehind machen komplett ohne Binding um es dann mit Binding an die CodeBehind zu machen um schlussendlich das ganze als MVVM Anwendung zu gestalten.
    Ich dachte mir dabei das man so wieleicht parallelen ziehen kann zwischen dem "WinForms" Stil und dann am Ende MVVM.

    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,
    wenn ich ehrlich bin, macht es für mich keinen Sinn, erst im CodeBehind zu arbeiten.
    Ich fände die Variante 1 App, Ordner mit Model, View, Viewmodel und dann von dieser App, das ganze auseinander ziehen nach MVVM.
    "Hier könnte Ihre Werbung stehen..."
    @Nofear23m: Für mich persönlich ist ein "Codebehind", respektive auf Events ausgelegte Variante nicht mehr nötig. Aber ich fände es für @asusdk (und da sind bestimmt noch weitere stille Leser denen es ähnlich geht) so eine Metamorphose vom "Winform-Style" hin zu einer MVVM Anwendung hilfreich um die Mechanismen besser zu verstehen.
    Teils verstehe ich das Verständnis, dass eine MVVM Anwendung "zu" komplex ist recht gut. Andererseits lernt man die Vorzüge erst kennen, wenn man die Commands versteht. Ab da wird es dann auch leichter.

    @MichaHo: Ich habe mich redlich bemüht, aber ich verstehe deinen zweiten Satz einfach nicht.

    Nofear23m schrieb:

    Wie findet Ihr das übrigens? Macht es sinn das wir es zuerst mit CodeBehind machen komplett ohne Binding um es dann mit Binding an die CodeBehind zu machen um schlussendlich das ganze als MVVM Anwendung zu gestalten.

    Ich teile hier die Meinung von MichaHo.
    Ich würde nämlich gar nicht so den "falschen" Weg aufzeigen, wie man es unter WinForms gemacht hat.
    Also ich bin für:
    1. Eine App mit View, ViewModel und Model (und dann halt Binden)
    2. Diese App auf MVVM umstellen (halt Servicec und so nutzen)

    Viele Grüße
    Florian
    ----

    WebApps mit C#: Blazor
    @Dksksm sorry, hab grad selber gelesen das ich Blödsinn geschrieben habe... kommt davon wenn die Chefin ruft...
    Ich meinte, das es gerade für WPF Einsteiger nicht sinnvoll ist, erst alles im Codebehind zu machen, dann viewmodel usw. dran bauen und dann das ganze nochmal in MVVM umzubrechen... ich denke, wenn WPF, dann muss ich mich auch direkt auf WPF einlassen. MVVM ist am Anfang ja erstmal nicht nötig, man kann es ja in einer App erstmal zusammen fassen. Dann weis man, was und wie zusammenspielt.
    Dann, nimmt man diese App und bricht sie für MVVM auf, dann lernt man, welche Dinge in welche Projekte gehört und wie am Ende die verschiedenen Teile austauschbar werden.
    Es gibt gefühlt 100erte Tutorials zu WPF und MVVM, viele davon erklären WPF wie WinForms. mit Button Click usw. einige gehen dann auf MVVM ein, nutzen dafür aber MVVM_Light oder Prism, da lernt man erst recht nicht, was wie zusammen spielt.
    ich denke, und da spreche isch jetzt absolut für mich, ein Projekt, sauber in WPF umgesetzt und dann auf MVVM gepolt und dann EntityFramework dran und dann eventuell mit Xamarin, Wäre vom Lernfaktor her am allerbesten.

    Sorry, irgendwie hab ich heute Mist an den Fingern oder mein iPad spinnt, muss dauern korrigieren

    EDIt: Man könnte ja eine Desktop App für VBParadies schreiben, später ne Android und iOS App... das wäre genial, eventuell sogar mit VS Extension, das man Codes direkt aus VS in den Thread posten kann...ohhh ein Träumchen...
    "Hier könnte Ihre Werbung stehen..."

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

    @MichaHo Jep, ich sehe es für mich persönlich ähnlich. Nur wir ticken ja nicht alle gleich. @Nofear23m gibt sich eine Riesenmühe um alle die von uns, die sich mit WPF schwer tun, einen guten Einstieg zu ermöglichen und sein Tutorial ist das beste Schulungsmaterial was es zu WPF gibt (IMHO). Da aber jeder anders lernt, warum soll das Schulungsmaterial nicht auch ein Kapitel "WPF Codebehind to WPF MVVM" beinhalten? Es ist ja nicht grundsätzlich falsch, so zu programmieren und wenn man als Einsteiger über den Vergleich doch zu MVVM kommt, um so besser. Besser als Aufgeben allemal.

    @flori2212 Und ich Dummerchen dachte 1 und 2 wären das Selbe....

    Nachtrag:
    @Nofear23m Also immer wieder WOW, dein Tutorial ist super. Einen Kritikpunkt habe ich aber. Ich sehe es ein klitzekleinesbischen wie @asusdk, ich habe null Vorteil gesehen an WPF, ausser an der Grafikengine ect. bis ich die Commands verstanden hatte. Erst ab da lernte ich WPF wirklich schätzen. Deshalb macht mir der (mittlerweile überschaubare) Mehraufwand gegenüber Winform nichts mehr aus. Deshalb finde ich, dass die Commands doch viel eher hätten kommen dürfen. Gott sei dank hatte ich es frühzeitig anhand deiner Hilfestellungen schon gelernt.

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

    Da hast du natürlich auch Recht @Dksksm, aber.... es gibt auch zig Tutorilas für WinForms, In VB, dort wird gezeigt wie man mit dem VisualBasic Namespace programmiert... das ist auch Mist und sollte nicht gelehrt werden. Bei WPF und CodeBehind, muss ich leider @asusdk Recht geben, wenn Du WPF mit Codebehind machst, was bleibt dann noch? Paar schöne Styles oder bisschen Animation?
    Meine persönliche Meinung ist, wenn WPF, dann bitte richtig, ansonsten halt WinForms nutzen...

    Ich geb Dir aber auch Recht, es gibt ein einziges WPF Tutorial (auf Deutsch) was man uneingeschränkt empfehlen kann und das ist das von @Nofear23m.
    "Hier könnte Ihre Werbung stehen..."
    Hallo Leute

    Danke für den sehr tollen Input. Das hilft mir enorm.
    Erstmal danke an alle für die netten Worte.

    Ich habs eh schon öfter gesagt, MVVM ist toll, keine Frage. Aber wenn ich jetzt so ein Telefonbuch hernehme - und selbst wenn ich das mit alles Features vollstopfe die mir einfallen - wäre es immer noch kein richtiger Grund dies in MVVM umzusetzen. Klar funktioniert MVVM bei kleinen Projekten, keine Frage. Aber das problem ist das die Leute abgeschreckt sind was alles notwendig ist um eine Anwendung mit 2-3 Fenstern unter WPF zu programmieren.

    Verständlich, wenn ich korrekt das MVVM Pattern umsetze benötige ich erstmal sehr viel um überhaupt anfangen zu können. Basisklassen, RelayCommand, Services usw.
    Da denkt sich jeder "Mein Gott, so viel Schnick Schnack, jetzt habe ich schon zig Files im Projekt und sehe noch immer keinen Fortschritt.

    Deshalb ist es nun mal so das ich nie sagen würde das es Falsch ist rein mit CodeBehind zu arbeiten. Ich kann auch eine Mischung machen zwischen CodeBehind und Binding.
    z.b. kann ich per CodeBehind einer Listbox einen DatenKontext geben und kann dannn mit Binding die DataTemplates implementieren. Kein Problem.

    Jetzt stellt sich die Frage ob es sinnvoll ist dies zu Zeigen oder ob dies jedem klar ist das das geht?

    Weiters @MichaHo, ich habe nich vor eine Anwendung zu machen und diese dann "aufzudröseln". Ich würde es so machen das ich die Anwendung IMMER komplet neu machen würde.
    Damit man auch direkt bei dieser art der erstellung einsteigen könnte, ist zwar mehr Arbeit, lohnt sich aber glaube ich.

    Was ich nicht machen werde ich alle Layer in einem Projekt zu machen um dann die Projekte in 4 einzelne Projekte zu entkoppeln. MVVM werde ich immer mit einzelnen Projekten zeigen.
    Das hat einen Grund. Ich möchte gar nicht das die Leute auf die Idee kommen alle Layer in ein Projekt zu packen.

    Warum?

    In einem Projekt habe ich alle Verweise und möglichkeiten. Sprich, es würde mir ger nicht erst auffallen wenn ich unabsichtlich einen View in das ViewModel hole. Und wenn ichs dann mal Trennen will stehe ich da und merke das ich Abhängigkeiten habe die ich gar nicht will. Ein sehr simples Beispiel: Dim IsSummaryVisible As Visibility
    Denkt man sich vieleicht nicht viel. Visibility ist aber ein Datentyp der nur im View (System.Windows in der PresentationCore.dll) verfügbar ist. Ups. Und schon ist es passiert.
    Wenn VS meckert es möchte einen Verweis auf PresentationCore.dll hinzufügen überlege ich schon mal kurz ob dies gut ist.

    Ich meine, wenn ich ein paar Teile aus dem Inhaltsverzeichnis entfernen könnte wäre das schon gut.
    Bzw. wenn ich die CodeBehind Variante des Telefonbuchs mache, sollte ich diese dann nur schnell mal erstellen (ohne allen Features) oder sollten da schon alle drei Varianten genau gleich aufgebaut sein?

    Grüße
    Sascha

    Edit:

    MichaHo schrieb:

    EDIt: Man könnte ja eine Desktop App für VBParadies schreiben, später ne Android und iOS App... das wäre genial, eventuell sogar mit VS Extension, das man Codes direkt aus VS in den Thread posten kann...ohhh ein Träumchen...

    Würde ich nur angehen wenn es eine API fürs Forum gebe und die gibts glaube ich nicht.

    Grüße

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

    @MichaHo Grundsätzlich kein Widerspruch, ist halt eine Verständisfrage. Zu den Tutorials möchte ich nur sagen, man kann aber, wenn man nicht gleich die erstbesten Lösungsansätze nutzt und auch die "Empfohlenen Einstellungen" etc. aus diesem Forum verinnerlicht, schnell und einfach die Spreu vom Weizen trennen. So habe ich angefangen. Allerdings fand ich schnell heraus, dass es für C# wesentlich mehr gute Quellen gibt als für VB.Net. Aus diesem Grund und auch aus einem "politischen" Grund, nämlich die Nicht-Annerkennung von Visual Basic als erst zu nehmende Programmiersprache, bin ich dann vor ein paar Jahren auch C# umgeschwenkt.
    Naja und an die geschweiften Klammern gewöhnt man sich^^ Die kann man auch platzsparend plazieren....

    (Nachtrag mit Anrede, weil @Nofear23m sein Beitrag zwischenzeitlich da war.)

    Dksksm schrieb:

    Einen Kritikpunkt habe ich aber. Ich sehe es ein klitzekleinesbischen wie @asusdk, ich habe null Vorteil gesehen an WPF, ausser an der Grafikengine ect. bis ich die Commands verstanden hatte.

    Erstmal gehe ich darauf ein warum nicht früher. Das kann ich dir sagen, es hätte keinen Sinn. Ohne das du AttachedProperties und DependencyProperties nicht durchnimmst wirst du kommands nicht richtig verstehen.
    Es spielt eben alles zusammen, sicher. Command einfach so herknallen aber nicht verstehen kann auch nix.

    Vorteile an der WPF. Mein Gitt, die Grafik und Transparenz ist pipifax. Also wegen sowas würde ich niemals wechseln. 90% aller Anwendungen kommen mit dem aus was WinForms bietet.
    Ne, es ist das Bindingsystem und alles was darauf folgt. Da fehlt jetzt noch der weitblick. Nur durch das Bindingsystem wird MVVM möglich. Dadurch das MVVM möglich wird habe ich eine Trennung der Layer und kann somit meinen Code wiederverwenden oder das selbe ViewModel oder Model z.b. für eine andere Anwendung verwenden. Richtig gebaut auch für eine HandyApp, Website, Whatever. (dann muss der Commandmanager aber aus der RelayCommand-Klasse)

    So, da die Layer getrennt sind kann ich nun auch testen. Und zwar automatisiert, ich kann TDD machen, ich kann im Team mit einem Designer arbeiten ohne das wir uns in die Quere kommen.
    All das wird erst durch das Bindingsystem möglich. Sicher, in kleineren Anwendungen macht das nicht so viel Sinn aber in größeren schon. Angenehmer nebeneffekt bei MVVM ist die Strukturierung und die Wartbarkeit bei größeren Anwendungen.

    Klar, Animationen, 3D, Transparenz, Vektoren usw.! Alles gut und schön, aber deshalb steigt man normalerweise nicht um.

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