WPF - Notizbuch, 2-3 User,

  • WPF

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

    WPF - Notizbuch, 2-3 User,


    Aber ich habe einen Vorschlag: solltest du Interesse haben alternative Ansätze zu sehen wie man es in der WPF macht oder besser gesagt wie ich es machen würde kannst du gerne einen Thread hierfür im WPF Bereich erstellen und wir gehen das vorab schon mal durch.
    Schreib einfach dazu WIE du die Daten gerne Abrufen möchtest und welche. Vieleicht ein Codeschnipsel wie du es bisher unter WinForms gemacht hast und ich mache das WPF equivalent dazu.


    Hi @Nofear23m, sorry das ich erst jetzt dazu komme, aber die gute alte Arbeit lässt mich leider nicht früher gehen, danke dir schon mal sehr für dein nettes Angebot^^

    Also, das entsprechende Winforms-Projekt habe ich dir unten angehängt, dieses kurz zusammengefasst:

    Ich habe ein DataSet erstellt, In diesem gibt es einen DataTable: Categorys, diese haben einen Namen und im Falle von DataSets natürlich auch eine ID, diesem DataTable untergeordnet ist der DataTable: Notiz.
    Auch mit ID, Name, Text, und einer CategoryID, anhand derer die jeweilige Notiz, einer Category untergeordnet ist, an der Notiz wiederum sind wieder DataTables angeschlossen, für Bilder, Dateien, und Links/URLs.
    DataSet.jpg vermittelt das evtl. etwas genauer ^^

    Im Mainview(.jpg) hatte ich gebundene Controls, die erste Listbox enthielt die Categorys, die zweite enthielt die der jeweiligen Category untergeordneten Notizen, und die RichTextBox deren Text.
    Wurde im Menü auf AllowEdit(.jpg) geklickt wurde im selben Dateipfad in welchem die Datenbank.xml lag, eine Datei mit namen "Working" erstellt (wenn diese Datei existiert, konnte keine andere Instanz des Programms, das editieren erlauben, ErfinderDesRades sagte mir das nennt man Pessimistic Lock). War das Editieren jedoch erlaubt, konnte eine Category erstellt/bearbeitet werden (CategoryName.jpg) oder eine Notiz angelegt/erstellt/bearbeitet werden(NoteCreation.jpg).
    Im Detailview (fast identsich zur Notecreation) wurde dann alles angezeigt inkl. der Bilder, Dateien, Links.


    Wichtig wäre für mich also auf jeden Fall das sämtliche Daten in einer Datei gespeichert werden, so dass mehrere Instanzen die Daten lesen (und wenn gerade erlaubt) auch bearbeiten können.
    Ideal wäre (das habe ich in meiner Winformsapplication leider nicht hinbekommen) das man auch Unterkategorien anlegen kann, welcher man die Notizen zuordnen kann.
    Die jeweiligen Notizen, benötigen Name, übergeordnete Kategorie, Text, beliebige Anzahl Bilder, beliebige Anzahl Dateien und beliebige Anzahl an Links (Ich liebäugle hier sehr mit deiner im Tutorial gesehenen methode eines Datatemplates in der Listbox)
    Geplant wäre also z.B. im MainViewWindow, links eine Art Treeview, und Rechts eine Listbox, welche eine Art Übersicht der jeweiligen Note darstellt, welche ich in einem Detailview, detailierter darstellen möchte.



    Soweit ich das Thema WPF bisher verstanden habe, sollen Daten/Berechnungen usw. im Hintergrund gemacht werden, so das das Window die Daten quasi "nur" noch anzuzeigen hat, ich habe also eine wahrscheinlich stark zu überarbeitende Klasse erstellt,
    wie ich das mir im Kopf etwa vorgestellt habe, allerdings bin ich hier bereits daran gescheitert deinen Vorschlag mit der IObservable zu integrieren, da diese offensichtlich nicht die Methode ".Add" bereitstellt, desweiteren, scheitere ich an der Grundsätzlichen Überlegung, wie die Daten als Datei gespeichert/geladen werden könnten - wie bereits gesagt bin ich mit der Klasse aktuell wohl eh auf dem Holzweg.


    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Note
    2. Public Class Categorys
    3. Public Property caName As String
    4. Public Property caParent As Categorys
    5. Public Sub New(Name As String, Optional Parent As Categorys = Nothing)
    6. caName = Name
    7. If Parent IsNot Nothing Then
    8. caParent = Parent
    9. End If
    10. End Sub
    11. End Class
    12. Public Class Notes
    13. Public Property nName As String
    14. Public Property nParent As Categorys
    15. Public Property nText As String = ""
    16. Public Property nImages As List(Of String) ' Hier meintest du in deinen Tutorials, das man Iobservable nehmen sollte, dieses verfügt jedoch nicht über die methode add ?
    17. Public Property nFiles As List(Of String)
    18. Public Property nLinks As List(Of String)
    19. Public Sub New(Name As String, Parent As Categorys)
    20. nName = Name
    21. nParent = Parent
    22. End Sub
    23. Public Sub addNotetext(text As String)
    24. nText = text
    25. End Sub
    26. Public Sub addImage(imagePath As String)
    27. nImages.Add(imagePath)
    28. End Sub
    29. Public Sub addFile(FilePath As String)
    30. nFiles.Add(FilePath)
    31. End Sub
    32. Public Sub addLink(Link As String)
    33. nLinks.Add(Link)
    34. End Sub
    35. End Class
    36. End Class


    Ich möchte definitiv klarstellen, das ich hier nicht die Arbeit auf dich abwälzen oder hier reine C&P Lösungen erhalten möchte! Ich habe nur aktuell nicht einmal einen Ansatz mit welchem ich beginnen könnte, geschweige denn ideen, wie ich das im allgemeinen umzusätzen hätte.

    Danke dir nochmals für dein Angebot
    Lieben Gruß
    AsusDK
    Bilder
    • Dataset.JPG

      62,92 kB, 905×577, 279 mal angesehen
    • AddPic.JPG

      23,38 kB, 367×324, 250 mal angesehen
    • AllowEdit.JPG

      19,29 kB, 416×219, 179 mal angesehen
    • CategoryName.JPG

      17,02 kB, 335×174, 197 mal angesehen
    • Mainview.JPG

      63,39 kB, 927×519, 203 mal angesehen
    • Note Creation.JPG

      52,61 kB, 865×471, 200 mal angesehen
    Dateien
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If
    Hallo

    Gerne werde ich mich dem annehmen.
    Wenn du erlaubst aber ohne jegliche KlickiBunti Geschichte und Dataset und/oder xmlDataProvider.
    Du wirst sehen, es geht sogar noch einfacher.

    Da ich auch Arbeiten muss weis ich nicht wann ich dazu komme, wird aber sicher noch diese Woche sein.
    Verzeih mir bitte wenn ich vieleicht dann das ein oder andere Property vergesse zu integrieren oder die View nicht so hübsch wird, evtl. werde ich auch die eine oder andere Helperklasse von mir verwenden aber ich werde versuchen dies zu vermeiden damit du dann nicht verwirrt bist was das jetzt alles soll.

    Keine Angst,ich mache jetzt kein MVVM sondern werde es einfach halten, so das man von WinForms kommend dahinter steigt was hier wo passiert.

    Sollte ich noch fragen haben melde ich mich hier.

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

    Nur klein Anmerkung: Ein Notizbuch ist eiglich sogar ein "zu kleines" Projekt, und garnet zwingend auf relationale Datenverarbeitung angewiesen.
    NoFear23m hat ja bereits gezeigt, dass man sowas mit einem Xml-Dokument-Editor abhandeln kann, was in Wpf ja offensichtlich ganz besonders einfach ist.

    Wie gesagt: Nur Anmerkung.
    Und auch nicht ganz korrekt, denn die Tatsache, dass du Multi-User-Betrieb willst, spricht denn doch für eine Datenbank.

    Nofear23m schrieb:

    Keine Angst,ich mache jetzt kein MVVM
    Och schade.
    Zumindest Trennung von View und ViewModel hätte ich aber doch sehr sinnvoll gefunden.
    Naja - egal, eiglich kann ich ja auch gespannt sein, wie du wohl eine Db-Anwendung ohne MVVM hinkriegst ;)


    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Wenn ich erlaube ohne Klickibunti ^^

    Mir wäre es sogar sehr recht wenn du die oberfläche simpel hältst, ich muss danach ja auch was zu tun haben,
    im focus steht für mich die Klasse welche im hintergrund steht (oder wie die Daten halt gemanaged werden) und das es als datei gespeichert werden kann.


    Da ich auch Arbeiten muss weis ich nicht wann ich dazu komme, wird aber sicher noch diese Woche sein.


    Arbeit geht definitiv vor, und da du mir ja freiwilig hilfst, wäre ich der letzte der da Anfangen würde dich zu hetzen =)
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If

    ErfinderDesRades schrieb:

    Und auch nicht ganz korrekt, denn die Tatsache, dass du Multi-User-Betrieb willst, spricht denn doch für eine Datenbank.

    Würde ich auch so sehen aber es dient ja als Beispiel also geht das für mich in Ordnung.

    ErfinderDesRades schrieb:

    Och schade.
    Zumindest Trennung von View und ViewModel hätte ich aber doch sehr sinnvoll gefunden.
    Naja - egal, eiglich kann ich ja auch gespannt sein, wie du wohl eine Db-Anwendung ohne MVVM hinkriegst

    Ja, ich finds auch schade, aber es sollte ja einfach gehalten werden. Wenn er sich jetzt gleich am anfang mit Services, und dem ganzen drumherum auch noch auseinandersetzen muss hat niemand was davon.
    Ob MVVM oder nicht ist im Grunde ja egal. Auch ohne MVVM kann man alles genauso über Binding erledigen.

    Leider komme ich nur frühestens heute abend mal dazu anzufangen, in der Arbeit ist die Hölle los wegen der WLTP umstellung. =O

    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 @asusdk

    Ich hab das Ding soweit fertig. Werde es aber noch ein wenig säubern und für dich Kommentieren.
    Ich denke morgen nach der Arbeit kann ich es dir dann hochladen.

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

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

    Hallo

    Also, ich habe jetzt anstatt alles zu Kommentieren ein kleines Video aufgenommen weil ich etwas im Stress bin.
    Anbei die kleine App. Der eigentliche Code zum Laden und Speichern der Daten ist nicht viel, das Drumherum für den View ist dann mehr, konnte aber leider nicht anders als es in mehrere Klassen und Workspaces aufzuteilen. Ich kann nicht aus meiner Haut raus, alles andere wäre mir zu wenig wartbar und erweiterbar.

    Ich gehe ja davon aus das du es vieleicht weiter ausbaust und erweiterst und dann willst du dich sicher auch nicht durch Codefiles mit 500 Zeilen Code wühlen. Also habe ich es brav aufgeteilt. Das selbe gilt für den XAML und die Styles.

    Das Video:



    Grüße
    Sascha
    Dateien
    • WpfNotes.zip

      (1,07 MB, 245 mal heruntergeladen, zuletzt: )
    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. ##

    Sehr geil, da kann ich schon wieder ne Menge lernen. Habe quasi schon wieder Tipps für mein Projekt bekommen.

    Ich bin dafür das du mehr Stress brauchst, dann gibt es mehr Videos.
    Rechtschreibfehler betonen den künstlerischen Charakter des Autors.
    Nene @Akanel, mehr brauch ich echt nicht. Und das bei der Hitze. Ich habe neben der Tutorialreihe ja auch noch meine eigenen Projekte an denen ich Arbeite.

    Aber genau für sowas ist der Supportthread ja auch da. Muss jetzt nicht immer gleich ein ganzes Projekt sein/werden aber der Supportthread soll auch dazu dienen das wenn jemand eine Frage hat welche nicht angesprochen wurde oder nicht im Inhaltsverzeichnis ist, ich hier auch auf diese Fragen eingehen kann.

    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 Sascha,

    Wow ! wahnsinn wieviel Arbeit du da rein gesteckt haben musst, dafür danke ich dir sehr, aber ernsthaft ? DAS findest du leichter als Winforms ? Allein die Zeilenmenge übersteigt das Winforms-Projekt um Welten ? Ich mein ich werds mir am Wochenende mal in Ruhe ansehen, aber da werd ich wohl definitiv nicht durchsteigen, da ist es vermutlich leichter absolut jedes Fenster in Winforms per GDI+ zu zeichen inkl. der Controls, schließlich wäre der einzige Grund für Wpf das es nun mal besser aussieht...

    trotzdem vielen vielen Dank das du dir so viel mühe gegeben hast, leider hat es mir eher aufgezeigt warum sich WPF so schwer etabliert...
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If

    asusdk schrieb:

    Allein die Zeilenmenge übersteigt das Winforms-Projekt um Welten ?

    Um was gehts denn jetzt? Den XAML oder den Code?

    Den XAML kann man ja eigendlich nicht rechnen, das erledigt bei WinForms ja der Designer für dich. Schau dir mal den vom Designer generierten Code an.
    Was du auch nicht vergessen darfst, ich habe es ja auch ausgeschmückt. Mach das Design mal unter WinForms nach und dann sehen wir weiter was mehr code ist.

    Ich finde es jetzt nicht viel Code die Daten zu laden und zu speichern. =O

    PS: Niemand sagt das WPF "leichter" ist. Von leichter war nie die Rede. Anders, JA. Hübscher, JA, gewisse Dinge und grafische Dinge einfacher, JA.
    Wie gesagt, man kann auch in WinForms mit DataSet oder XmlDataProvidern arbeiten, ICH finde es nur schöner wenn ICH bestimmen kann was wie wann passiert und ich den Code sehen kann der da abläuft!!!
    Aber ist eben Geschacksache.
    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. ##

    Nofear23m schrieb:


    Anbei die kleine App.


    Auch wenn es ja nicht speziell für mich gemacht ist, aber das Programm beantwortet mir die meisten Fragen, die mich derzeit beschäftigen um überhaupt mit kleinen WPF Tools anfangen zu können. Von dem Programm samt Video (hab ich jetzt einmal angesehen) werde ich eine ganze Weile dran gut haben.
    Vielen Dank Sascha, sehr tolle Arbeit und genau was mir immer fehlte :)
    Um was gehts denn jetzt? Den XAML oder den Code?


    die Xaml hab ich mir bisher noch nicht angesehen, alleine die tonnen an Code die im Hintergrund stehen sind bereits gewaltig genug, und stellen dabei in dem benutzten Umfang fast schon eine neue Sprache dar, geschweige denn dann vom Xaml, was sogar ne neue Sprache ist ^^
    Und ja wie gesagt am WE schau ich mir das ganze mal genauer an, aber selbst bei der menge an unterschiedlichen klassen werd ich wohl mit dem durchblicken scheitern (alleine 13 Klassen !) plus xaml
    Des weiteren, kann cih diese diagram dateien leider nicht öffnen, da bekomme ich leider nur Code angezeigt, und keine Diagramme
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If

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

    Hallo

    Dksksm schrieb:

    Auch wenn es ja nicht speziell für mich gemacht ist, aber das Programm beantwortet mir die meisten Fragen, die mich derzeit beschäftigen um überhaupt mit kleinen WPF Tools anfangen zu können.


    Solltest du fragen zur WPF, XAML oder dieser kleinen Demo haben dann bitte nur her damit. OK, das war jetzt ein schnelles Beispiel-Progrämmchen aber dennoch ist es für "nicht WPFler" am Anfangf schwer die Zusammenhänge zu sehen. Einfach nur fragen, merke(!!). Es gibt KEINE dummen Fragen. Es gibt nur dumme Antworten. Auch gibt es genug das man nicht so einfach ergoogeln kann, gerade in diesem Bereich weil hier jeder Fall etwas anders zu lösen ist. ICh verurteile niemanden wenn er mir löcher in den Bauch fragt, im Gegenteil - wenn man aufgibt ohne es probiert zu haben zeug das für mich von schwäche.

    Nachtrag wegen @asusdk Antwort:

    asusdk schrieb:

    aber selbst bei der menge an unterschiedlichen klassen werd ich wohl mit dem durchblicken scheitern

    Schade, ich dachte du hättest eine andere Einstellung. Wenn man schon so an die Sache ran geht.

    Wie ich geschrieben (im Video erwähnt) habe, habe ich es so erstellt das es leicht wartbar ist und Strukturiert. Dadurch hat man eben schon mehr als die doppelte Anzahl an Klassen.
    Auch im XAML die Usercontrols. Ich kann auch alles in eines Packen und auch die Styles weglassen. Super, und dann Scrollt man sich irre.

    Ich denke gerade an die WinForms-CodeBehind die ich hier oft sehe mit 1500 oder 2000 Zeilen. TOP!

    Ich hätte die ganze App mit 3 Dateien auch machen können. Das machts aber nicht lustiger, so ist alles Wartbar und hat seine Ordnung. OK, am Anfang fühlt man sich erschlagen, aber wer wirft denn gleich die Flinte ins Korn.
    Ordnung ist auch beim Proggen wichtig.

    PS: Wäre wirklich interessant, wieviel Code ein Winforms Projekt mit Annähernd den gleichen Funktionalitäten (von der Optik spreche ich jetzt nicht) hätte.
    PPS: Man muss auch bedenken das ca. 50% von dem Code generiert wurde (Properties und Commands generiert VS)


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

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

    asusdk schrieb:

    Des weiteren, kann cih diese diagram dateien leider nicht öffnen, da bekomme ich leider nur Code angezeigt, und keine Diagramme

    Muss in VS 2017 installiert werden. Siehe 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. ##

    OK, und lass dich nicht entmutigen vn den vielen Klassen.
    Ich wollte nicht alles in die CodeBehind reinpacken, vermutlich hätte das für dich dann "weniger" gewirkt obwohl es das nicht wäre, ausserdem verliert man den Designtime-Support.
    Klar wirkt es am Anfang viel, du wirst aber sehen das es gar nicht viel ist.

    Alleine dadurch das ich in der WPF ein Property statt:

    VB.NET-Quellcode

    1. Public Property Test As String

    wie folgt schreibe:

    VB.NET-Quellcode

    1. Private _test As String
    2. Public Property Test As String
    3. Get
    4. Return _test
    5. End Get
    6. Set
    7. _test = value
    8. RaisePropertyChanged()
    9. End Set
    10. End Property


    Wirkt es wie viel mehr Code was es im Grunde ja gar nicht ist. Bis auf die Zeile RaisePropertyChanged() ist der Code im Grunde der selbe.
    Auch die Commands hätte ich enorm abkürzen können. Besser lesbar und übersichtlicher ist es aber so. Oft ist mehr Code übersichtlicher als weniger. (Meine Meinung)

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

    ich finds eiglich nicht allzuviel.
    Das Teil macht halt jede Menge:
    Laden, speichern, ein Datenmodell gibts, Validierung, Sortierung, Filterung, zufügen (mit Extra-Dialog), Löschen, Parallel-Bearbeitungs-Überprüfung, Dateien einbinden, ... vmtl. habich noch einiges vergessen.

    Dafür ist das nicht viel Code.
    Hallo @ErfinderDesRades, finde ich ja eigendlich auch, die Sache ist nur das es vieleicht erschreckt das alles "brav" in einzelne Klassen aufgeteilt wurde um es wartbar zu halten.
    Aber ich muss zugeben, Validierung habe ich jetzt nicht rinnen :huh: , aber das wären jetzt nur ein paar Zeilen mehr. Vorallem...... durch die Strukturierung wäre es sehr schnell und einfach eingebaut.

    Aber @asusdk kann ja wenn er durchblickt oder mit unserer Hilfe gerne Dinge wie Validierung nachimplementieren.

    Schöne Grüße
    Sascha

    PS: @ErfinderDesRades Was haltest du so davon? Ist jetzt kein MVVM aber ich denke so kann man auch ohne MVVM ganz übersichtlich Arbeiten.
    Mich würde deine Meinung echt interessieren. OK, es ist nicht der sauberste code weil ich es schnell mal erstellt hatte, aber so ansich würde mich deine Meinung schon interessieren, vieleicht auch ob man was Optimieren könnte.
    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. ##