Wo in einem MVVM Projekt Styles implementieren?

  • WPF

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

    Wo in einem MVVM Projekt Styles implementieren?

    Hallo zusammen.
    Wo implementiert man am besten die Styles für die Controls?

    Gegeben sein eine Projektmappe wie auf folgendem Bild. (einfache MVVM Struktur)

    Nun habe ich mich daran versucht wie man am einfachsten die Styles einbindet.
    Ich habe es versucht im Hauptprojekt (HStatistik auf dem Bild) und in der View.
    Beides Funktioniert.
    Wenn ich die Styles in die View packe, wo sie meiner Meinung nach vom Sinn her hin gehören, habe ich deutlich mehr Schreibarbeit, da ich dann in jedem Usercontrol erst die Styles in den Usercontrolresourcen definieren muss. Je nach dem welche ich benötige.
    Im Hauptprojekt löse ich das über die Application.xaml. Da habe ich dann alle drin, und auch überall zugriff darauf.

    Wo gehören die Styles nun rein? Gibt es eine Art Konvention? Kann es bei einer der beiden Arten später Probleme geben wenn das Projekt mal grösser werden sollte?
    Rechtschreibfehler betonen den künstlerischen Charakter des Autors.
    Pauschal kann das nicht gesagt werden.

    Akanel schrieb:

    Wenn ich die Styles in die View packe, wo sie meiner Meinung nach vom Sinn her hin gehören, habe ich deutlich mehr Schreibarbeit, da ich dann in jedem Usercontrol erst die Styles in den Usercontrolresourcen definieren muss.

    Ne, du kannst im View-projekt ein Resourcenfile haben und dieses dann einfach in die Applikation.xaml des WPF Projekt verlinken. Auch das ist möglich.

    Akanel schrieb:

    Gibt es eine Art Konvention?

    Je nachdem was man wie benötigt.

    Es kommt darauf an was du brauchst. Ich definiere es gerne im View. Aber.... es kann sein das du deine Views ja auch in mehreren Projekten verwendest. Dann könnte man auch einen "Default"-Style in den Views definieren und in der jeweiligen Anwendung diesen dann in der Application.xaml dann überschreiben (oder nur Teile davon).

    So hätte man einen Standard und kann diesen Standard aber beeinflussen.

    Fazit: Es bleibt dir überlassen. Hast du nie vor die Dinger im View wo anders zu verwenden bleibt es gleich. ansonsten ist es im View besser aufgehoben.

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

    Danke für deine Antwort.

    Nofear23m schrieb:

    Ne, du kannst im View-projekt ein Resourcenfile haben und dieses dann einfach in die Applikation.xaml des WPF Projekt verlinken. Auch das ist möglich


    Ich glaube daran werde ich mich mal versuchen. Mal sehen ob ich das hinbekomme.

    Nofear23m schrieb:

    es kann sein das du deine Views ja auch in mehreren Projekten verwendest.


    Da habe ich gerade eine Denkblockade. Was meinst du damit das ich die Views in mehreren Projekten benötige? Oder meinst du die Styles und hast dich vertippt?


    Edit: Habe es hinbekommen und funktioniert super.
    Style im View erstellt und in Hauptprojekt in der Application.xaml einfach

    XML-Quellcode

    1. <ResourceDictionary Source="pack://application:,,,/YourAssembly;component/Subfolder/YourResourceFile.xaml"/>
    Rechtschreibfehler betonen den künstlerischen Charakter des Autors.

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

    Akanel schrieb:

    Was meinst du damit das ich die Views in mehreren Projekten benötige?

    Damit meinte ich - was ist wenn du mehrere Applikationen hast (z.b. eine Enduser-App und eine Admin-App) und willst die Controls UND deren Styles in beiden Projekten verwenden.
    Dann willst du ja nicht die Application.xaml in beide kopieren = immer an beiden stellen warten. In diesem Fall sollte alles in dem Projekt mit den Views sein und deine controls sehen in beiden Projekten gleich 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. ##

    Ahhh jetzt versteh ich es. Danke dir für die Beschreibung. Aber von solchen Entwicklungen bin ich noch weit entfernt. Aber schon gut zu wissen was es zu beachten gibt, wenn ich soweit bin
    Rechtschreibfehler betonen den künstlerischen Charakter des Autors.
    Hi,
    ich hab zum Beispiel ein eigenes Resource Projekt. In diesem hab ich alle Styles, Animation, attached properties und converter.
    im View projekt setze ich einen verweis auf die resourcen und im WPF projekt auch, in der App.xaml lade ich die resourcen.
    im View Projekt hab ich dann nur die Controls usw. drin, die ich für dieses Projekt brauche. Im resourcen projekt hab ich alles, was ich in allen anderen Projekten auch gebrauchen kann.
    "Hier könnte Ihre Werbung stehen..."
    Hallo @MichaHo
    Da hätte ich mal eine Frage:
    Wie machst du es denn, wenn du das Ressource Projekt updatest. Musst du dann in alle einzelnen Projekte das Ressourcen Projekt neu hereinkopieren.
    Oder gibt es da einen Trick?

    Viele Grüße
    Florian
    ----

    WebApps mit C#: Blazor
    Klar gibt es das einen Trick. NuGet
    NuGet geht nicht nur Online. Du kannst hier auch einen lokalen Pfad angeben. In diesem hast du deine Pakete liegen und hast Ordnung.

    Wenn du ein Paket updatest dann siehst du in deinen Projekten gleich das es ein Update gibt.

    Aber das wäre wieder ein anderer Thread.

    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,
    hab festgestellt das das deployen von NuGet Paketen in Verbindung mit einem Azure Dev-Ops Account noch um einiges besser ist.
    Über Azure Dev-Ops kann ich nun nicht nur meine Versionsverwaltung machen, sondern gleichzeitig NuGet Pakete bereit stellen.
    Fantastisch..... und kostet überhaupt garnix.
    Und durch die Freigabe für bestimmte Benutzer könnte man das ganze auch innerhalb eines Personen Kreises verteilen...
    "Hier könnte Ihre Werbung stehen..."