NavigationView

    • XAML: WPF
    • .NET 7–8

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

      NavigationView

      Hallo Leute,

      ich versuche mich gerade an Nuget-Packages und hab ein kleines Paket erstellt.
      Mich nervt bei WPF das Navigieren. In MVVM darf das ViewModel nichts von der View wissen.
      Also muss man immer ein NavigationService oder ähnliches bauen, um über irgendwelche Interfaces auf die View zuzugreifen.
      Gerade wenn ich mal schnell was testen will ist, das ein riesengroßer Aufwand.
      Hab jetzt mal eine kleine Navigation Hilfe gebaut und würde gerne eure Meinung wissen dazu.
      Vielleicht kann man das zusammen ausbauen und testen.
      Ihr findet das Nuget unter LightNavigation in den NugetManager in Visualstudio.
      Wie gesagt, steht ganz am Anfang und könnte noch Fehler haben.
      Es ist in NetCore 7 geschrieben und die Icons müssen als Geometry angegeben werden, da sie die Farbe ändern müssen.

      Auf der rechten Seite der NavigationView kann man ein Sidemenu erstellen, mit NavItems.
      Rechts wird der Content angezeigt. Der Content ist ein UserControl der jeweils einmal für ein NavItem erstellt wird.
      Das Usercontrol wiederum kann beliebig bearbeitet werden und sein eigenes ViewModel mitbringen. So kann man sich Commands und sonstige Sachen ersparen.


      Nochmal hochgeladen ohne EXE-Datei.

      *Anhang mit EXE-Dateien entfernt*
      *Topic verschoben*

      nuget.org/packages/LightNavigation
      Dateien

      Dieser Beitrag wurde bereits 8 mal editiert, zuletzt von „Amro“ ()

      Kleiner Hinweis zu deinem Paket.

      Du schreibst, dass das Ding MIT-lizensiert ist. Hast du irgendwo auch den Quellcode? Bspw. bei GitHub?

      Des Weiteren möchte ich dir noch sagen, dass du etwas an deinem Markdown arbeiten solltest.

      Den Code solltest du in Code-Blöcke packen:

      ```xaml
      <Grid>

      <nv:NavigationView SelectedIndex="1">
      <nv:NavItem Text="Home" IconGeometry="{StaticResource HomeIcon}" ViewType="{x:Type views:HomeView}"/>
      <nv:NavItem Text="Home" IconGeometry="{StaticResource StarIcon}"
      <nv:NavItem Text="Account" IconGeometry="{StaticResource AccountIcon}" ViewType="{x:Type views:AccountView}"/>
      </nv:NavigationView>

      </Grid>
      ```

      Und für dein Beispiel solltest du vieleicht noch explizit erwähnen, dass `xmlns:nv="clr-namespace:LightNavigation.NavigationView;assembly=LightNavigation" xmlns:views="clr-namespace:LightNavigation.App.Views` in die View mit als Namespace eingebettet werden müsste.

      Zum Quellcode kann ich leider nichts sagen, ich habe aktuell keine Projekte, die davon Gebrauch machen könnten, dennoch wollte ich dir da etwas Feedback geben :)

      Die o.g. Tags kannst du direkt in die README.md schreiben, ist gültiger Markdown.
      Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

      Meine Firma: Procyon Systems
      Meine Privatwebseite: SimonC.eu

      Bitte nicht wundern, wenn meine Aktivitäten im Forum etwas langsamer sind, ich baue gerade mein Nebengewerbe zum Vollgewerbe aus.
      Ich versuche auf euch zurückzukommen :)
      Das mit den MIT-lizensiert ist irgenwie da rein gerutsch. ich mach sowas zum ersten mal.
      Lass uns das mal schritt für schritt angehen.
      Ist den eine solche lezens notwendig? ich will eigentlich gerade nur Testen ob das funktioniert.

      siycah schrieb:

      Den Code solltest du in Code-Blöcke packen:


      Das war auch nur ein Test weil das Packet nur mit eine ReadMe.md hochgeladen werden konnte. Da soll eigentlich ertsmal gar nix rein.

      Warscheinlich wieder alles falsch gemacht :)



      Hab eine kleine Anleitung in die ReadMe gepackt. Bei den Views kommt es darauf an wo du deine Views hast. In dem kleinen Beispielporojekt ist das der Ordner 'Views'.

      siycah schrieb:

      Und für dein Beispiel solltest du vieleicht noch explizit erwähnen, dass `xmlns:nv="clr-namespace:LightNavigation.NavigationView;assembly=LightNavigation" xmlns:views="clr-namespace:LightNavigation.App.Views` in die View mit als Namespace eingebettet werden müsste.


      Danke für den Tipp. Das hat auch geklappt mit den Hochkommas.

      siycah schrieb:

      Den Code solltest du in Code-Blöcke packen:


      Beiträge zusammengefügt. ~Thunderbolt

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

      Amro schrieb:

      Das mit den MIT-lizensiert ist irgenwie da rein gerutsch. ich mach sowas zum ersten mal.


      Ich bin mir nicht sicher, aber ich meine als Default ist gar keine Lizenz hinterlegt.
      Ach du, ob du das zum Ersten mal machst - alles gut. Wenn man das nicht jeden Tag macht, dann muss man sich überall erst einlesen. Mach dir da keinen Stress.

      Amro schrieb:

      Lass uns das mal schritt für schritt angehen.


      Jau, gerne.

      Ich weiß ehrlich gesagt nur bedingt, wie das Erstellen solcher Pakete mit VS geht, da ich das immer mit VS für Mac und VS Code mache und direkt in den Projektdateien arbeite.

      Was ich dir jedoch mitgeben kann, ist dass es einige Felder gibt, die man füllen sollte.
      Ich mach hier mal einen groben Überblick mit Beschreibung.

      XML-Tag
      Beschreibung
      <Description></Description>Hier beschreibst du dein Projekt. Was macht es?
      <Authors></Authors>Gib hier ein, wer an dem Projekt gearbeitet hat.
      <Copyright></Copyright>Du hast etwas gemacht, also hast du auch Urheberrechte. Das solltest du ausfüllen.
      <PackageId></PackageId>Hiermit gibst du die ID deines Projektes ein. Du hast dich bereits für LightNavigation entschieden. Ich würde es dann dabei lassen, sonst erstellst du immer neue Projekte bei NuGet und das sieht irgendwann wirklich doof aus.
      Das ist dann der Name, den du in der Eingabeaufforderung eingibst, um das Paket zu installieren.
      <PublisherName></PublisherName>Hier gibst du deinen Namen ein
      <SupportUrl></SupportUrl>[optional] Wenn du irgendwo ein Bereich hast, wo Leute bei Fragen Hilfe bekommen, oder wo du deine Dokumentation hast, gib die URL hier ein.
      <RepositoryUrl></RepositoryUrl>
      [bei Open-Source!] Hier kannst du eingeben, wo dein Quellcode gehostet ist, wenn dieser open source ist.
      <PackageProjectUrl></PackageProjectUrl>Falls du eine Übersichtsseite für dein Projekt hast, kannst du hier die URL eintragen
      <RepositoryType></RepositoryType>[bei Open-Source!] Hier gibst du ein, um welche Art von Repo es sich handelt. Git wird am häufigsten verwendet, du könntest allerdings auch SVN oder TFS eintragen, falls du so etwas verwendest.
      <GenerateDocumentationFile></GenerateDocumentationFile>True/False, je nachdem, ob du Doku mitliefern willst (würde ich empfehlen)
      <PackageReadmeFile></PackageReadmeFile>Hier gibst du den Pfad zur README ein, relativ zur .csproj. Z.B.: ../README.md
      <PackageLicenseFile></PackageLicenseFile>Sobald du Projekte öffentlich machst, sollte eine Lizenzdatei enthalten sein, damit Endnutzer wissen, woran sie sind. Ebenfalls relativer Pfad wie oben
      <version></version>Ist denke ich selbsterklärend
      <PackageTags></PackageTags>Eines der wichtigsten Felder! Hier gibst du Tags an, also Schlagworte, unter denen Leute dein Projekt finden können.
      <PackageReleaseNotes></PackageReleaseNotes>Für jede Version, die du veröffentlichst, gibt es Neuigkeiten im Code. Dieses Feld nutzt du dafür. Das wird dann direkt bei NuGet angezeigt.
      <Title></Title>Gib' dem Kind 'n Namen, nach dem Motto
      <PackageRequiresLicenseAccept></PackageRequiresLicenseAccept>Gib hier True ein, wenn Leute beim Installieren deines Paketes die Lizenz akzeptieren müssen, bevor sie es nutzen. Ist vor allem bei Closed-Source relevant.
      <PackageIcon></PackageIcon>Gib hier ein Pfad zu einem Bild an, unter dem dein Projekt zu finden ist.

      Hier und hier sind Beispiele von einem meiner Projekte. Kannst du dir gerne anschauen.

      Amro schrieb:

      Ist den eine solche lezens notwendig? ich will eigentlich gerade nur Testen ob das funktioniert.


      Lizenzen sind immens wichtig, da du darüber bestimmst, wie und für welche Zwecke deine Software verwendet werden darf. Du kannst z.B. sagen, dass jede Privatperson das Tool nutzen darf, aber für kommerzielle Nutzung eine kostenpflichtige Lizenz erworben werden muss (Achtung: hierfür wäre schon fast eine Gewerbe notwendig!)

      Amro schrieb:

      Warscheinlich wieder alles falsch gemacht


      Kopf hoch, ist noch nie ein Meister vom Himmel gefallen. Es ist alles ein Lernprozess.

      Amro schrieb:

      Bei den Views kommt es darauf an wo du deine Views hast. In dem kleinen Beispielporojekt ist das der Ordner 'Views'.


      Dann solltest du diese Information ebenfalls in die README schreiben. Je weniger die Nutzer rätseln müssen, desto wahrscheinlicher ist es, dass sie beim Paket bleiben und auch Updates ziehen.

      Amro schrieb:

      mit den Hochkommas.


      Entschuldige bitte die Erbsenzählerei, allerdings sind das keine Hochkommata. Hochkommata (') haben bei Markdown keine wirkliche Relevanz. Code-Blöcke werden mit Backticks (` - oder auch Accents) geschrieben :D

      EDIT: Ich habe mir gerade deine Änderungen angeschaut. Schaut schon besser aus :)
      Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

      Meine Firma: Procyon Systems
      Meine Privatwebseite: SimonC.eu

      Bitte nicht wundern, wenn meine Aktivitäten im Forum etwas langsamer sind, ich baue gerade mein Nebengewerbe zum Vollgewerbe aus.
      Ich versuche auf euch zurückzukommen :)
      Das Beispielprojekt ist jetzt ohne Exe-Datei.

      @siycah
      Vielen Dank für deine Mühe.
      Deine Infos sind echt gut, ich glaub ich bekomm das hin.
      Werde es so machen sobald ich dazu komme.

      Schade das es kein Feedback zum Projekt an sich gibt hier im Forum.
      Kommt nicht so gut an wie ich dachte.

      Was mich noch Interessieren würde wenn du das vielleicht weißt.
      Gibt es eine Möglichkeit seine Nuget-Packages auch Privat zu nutzen.
      So könnte ich meine eignen Packages schreiben und sie von überall abrufen.
      Das wäre eine coole Sache .

      Edit: Oh ich hab gerade gesehn das es bei nuget doch129 runter geladen wurde. Mal sehen vielleicht lohnt es sich doch noch an dem Projekt weiter zu arbeiten.
      Bilder
      • down.png

        35,6 kB, 1.303×527, 67 mal angesehen

      Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „Amro“ ()

      Amro schrieb:

      Vielen Dank für deine Mühe.


      Kein Problem, gerne :)
      Ist immer ganz nett, wenn man Leuten helfen kann.

      Amro schrieb:

      Schade das es kein Feedback zum Projekt an sich gibt hier im Forum.
      Kommt nicht so gut an wie ich dachte.

      Ach wo, mach dir darum keinen Kopf. Siehe es mal anders: du hast auch kein negatives Feedback bekommen, also wird es schon gar nicht so schlecht sein ;)
      Positiv denken.

      Andererseits lass' dich nicht davon verunsichern, wenn gar nichts kommt. Natürlich darfst du dich über Feedback freuen, aber das Wichtigste ist, dass du daran Spaß hast!

      Amro schrieb:

      So könnte ich meine eignen Packages schreiben und sie von überall abrufen.
      Das wäre eine coole Sache .


      Du kannst natürlich auch ein privates NuGet-ähnliches Portal hosten: learn.microsoft.com/en-us/nuget/hosting-packages/overview
      Dafür brauchst du dann natürlich einen Hoster, oder du machst es privat bei dir. Kann denke ich nicht so schwer sein. Private NuGet-Feeds habe ich noch nicht gemacht, dafür Docker, Git und diverse andere Tools. Die meisten sind da sehr gut dokumentiert. Für meine Kunden mache ich das auch, das solltest du schaffen :)

      Amro schrieb:

      Oh ich hab gerade gesehn das es bei nuget doch129 runter geladen wurde. Mal sehen vielleicht lohnt es sich doch noch an dem Projekt weiter zu arbeiten.


      Na siehste ;) Kopf oben behalten
      Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

      Meine Firma: Procyon Systems
      Meine Privatwebseite: SimonC.eu

      Bitte nicht wundern, wenn meine Aktivitäten im Forum etwas langsamer sind, ich baue gerade mein Nebengewerbe zum Vollgewerbe aus.
      Ich versuche auf euch zurückzukommen :)

      Amro schrieb:

      Schade das es kein Feedback zum Projekt an sich gibt hier im Forum.
      ich zB habe nicht verstanden, welches Problem da gelöst wird. "Navigation in Wpf" - was ist damit gemeint, und was ist da das Problem?
      Da müsse man immer so viele Services einführen und Kram - ich hab noch nie einen Service reingebastelt.
      Ich hab aber auch kein .Net 7.
      Und hier ist SourceCode-Austausch - aber soweitichweiss enthalten Nuget-Pakete keine Sources - sind wir hier im richtigen Forum?

      ErfinderDesRades schrieb:

      Und hier ist SourceCode-Austausch - aber soweitichweiss enthalten Nuget-Pakete keine Sources - sind wir hier im richtigen Forum?

      Hat ein Moderator verschoben,war Ursprünglich in sonstige Probleme.


      @siycah
      Was macht dein Projekt genau? Ich mein das getopt.net auf Github?

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

      Amro schrieb:

      Was macht dein Projekt genau? Ich mein das getopt.net auf Github?


      getopt.net ist eine Portierung der POSIX/Unix getopt[_long]-Funktionalität in C#.

      Die Bibliothek erlaubt es dir, ganz einfach Argumente per Terminal an deine Applikation zu übergeben, oder auch innerhalb deiner Applikation Argumente an Unterobjekte, wie Plugins, zu übergeben.
      Das Parsen von langen und kurzen Parametern, wie z.B. --help und -h wird von der Bibliothek übernommen und am Ende bekommt deine Applikation Bescheid, welche Argumente übergeben wurden.
      Unterstützt auch Argumente im Windows Format (/help und /h) sowie Argumente im Powershell-Format (-help -h) inkl. Parameter:

      .\mein_programm.exe /config:C:\config.txt --output=C:\output.txt -input C:\input.txt

      Dazu habe ich hier im Forum ebenfalls einen Eintrag: getopt.net - Getopt-ähnliches Argument-Parsing für .net
      und sonst steht alles Weitere in der README im Repo und auch auf NuGet :)
      Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

      Meine Firma: Procyon Systems
      Meine Privatwebseite: SimonC.eu

      Bitte nicht wundern, wenn meine Aktivitäten im Forum etwas langsamer sind, ich baue gerade mein Nebengewerbe zum Vollgewerbe aus.
      Ich versuche auf euch zurückzukommen :)