1:n-Übersicht im MVVM

  • WPF

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

    1:n-Übersicht im MVVM

    Hi,

    ich habe mich heute mal ein klein bisschen mit Datenmodellierung befasst. Angesehen habe ich mir da mal das DatasetOnly-Tutorial von @ErfinderDesRades:.

    ich hab mir also beispielhaft dieses DataSet angelegt und eine Reihe Beispieldaten geschrieben. Geschieht alles gemäß obiger Anleitung ohne Datenbank per XML.


    Ich hab mir dann mal eine kurze Ansicht im DataGrid mit MVVM zurechtgebastelt. Laden und Speichern klappt soweit alles, entsprechend übertragen auf Commands.


    Jetzt stoße ich aber an ein Problem: Dei Realisierung einer 1:n-Ansicht. Sprich: Ich habe die Liste von Kategorien und bei Auswahl werden mir alle entsprechenden Artikel aufgelistet. Das wollte ich als ersten, weitergehenden Schritt mal umsetzen, allerdings stehe ich vor der Frage, wie genau man das realisiert, und vor Allem am Idealsten? Ich bin mir sicher, dass die WPF da einiges zu bieten hat.

    mfg,
    Lukas
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.

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

    Ich habe auch mal mit DataSets angefangen xD
    So wie ich das verstanden habe braucht man für eine m:n-Relation eine "Mittlertabelle", etwa so:



    In der Mittler-Tabelle kann man dann einem Artikel mehrere Kategorien zuordnen bzw einer Kategorie mehrere Artikel. Falls das so nicht in Ordnung ist lasse ich mich gerne verbessern^^
    Upps, vor lauter Bäumen hab ich den Wald nicht mehr gesehen ;) Artentus hat natürlich Recht, es ist eine 1:n-Beziehung.

    Ich korrigiere es mal um.
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    ähm - wpf!

    und lukas meint den ParentChild-View, naja, eiglich könnte man das tatsächlich ebensogut 1:n-View nennen.

    jedenfalls wpf ist crap.
    Das unterstützt das typisierte Dataset nicht in der Weise, wie Winforms es tat.
    wpf ist eher auf EntityFramework ausgelegt, gugge 4ViewsWpf

    ich vermute ja eine böse Firmenpolitik von M$ dahinter, weil sie haben erkannt, dass mit Dataset.WriteXml viele viele DB-Anwendungen ohne DB geschrieben werden können, oder mit anneren Connections kann man zB MySql nutzen.
    Aber in wpf wollense nu ganz stark an ihre DB-Produkte binden, und daher unterstützen sie nurnoch EF und Konsorten - die sind zwingend an ein M$-DB-Produkt gebunden vernünftig läuft das ausschließlich mittm SqlServer.

    jedenfalls ein ParentChildView geht in wpf meines wissens (vlt. findich ja nochmal iwas) nur auf 2 Arten:
    1. die ParentRow hat eine Property mit ihren ChildRows
    2. Der ChildView zeigt die ChildTable an - allerdings wird ein Filter gesetzt.
    Hi @ErfinderDesRades:,

    schade das zu hören. WPF hat ja in vielen Bereichen an Funktion zugelegt, davon bin ich auch hier ausgegangen - allerdings war ich schon etwas sprachlos, da ich viele Lösungen mit einem hohen Codebehind-Anteil gesehen habe. Das hat mich dann schon ein bisschen ins Grübeln kommen lassen, ob ich jetzt falsch suche oder die Funktionalität da komplett anders ist.

    Dein zweiter Vorschlag ist mir auf meiner Suche auch schon begegnet, und ich habe ihn auch schon umgesetzt. Allerdings gefällt es mir hier nicht, dass da wieder ziemlich viel Codebehind bzw. harcoded ist. Ich werd mich nochmal ein bisschen umsehen und daran herumschrauben. Ich meld mich dann nochmal, was dabei so rauskommt.

    @FreakJNS: Ich verstehe nicht so genau, was du mir damit sagen willst?

    Edit: Ich habe jetzt mal ein Beispielprojekt angefertigt und hänge die Projektmappe hier an.

    Das ganze funktioniert soweit, ich habe die Stellen im MainWindowViewModel kommentiert, die mir noch nicht so recht gefallen wollen. In der Kurzfassung geht es um:
    • Die Vorgabe eines Defaultwertes für die CategoryID im ChildView. Die sollte immer der der aktuell gewählten Kategorie entsprechen. Funktioniert, aber geht das besser?
    • Problem in Verbindung mit INotifyPropertyChanged beim Neuladen
    Dateien
    • DataGridTest1.zip

      (113,18 kB, 105 mal heruntergeladen, zuletzt: )
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.

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

    oh - ich muß alles zurücknehmen: Wpf kann doch auch mit Dataset-Relationen arbeiten - fast wie in WinForms.
    Das wesentliche ist: Datagrid.IsSynchronisizedWithCurrentItem, mit dem iwie eine Hexerei definiert ist, dass ein anneres Binding,was denselben Pfad verlängert, über dieses DG gesteuert wird.
    Dabei ist .IsSynchronisizedWithCurrentItem allgemeiner gefasst: es ist eine Property von Selector, der BasisBasis...Klasse von Datagrid.
    Dateien
    jetzt auch die Umarbeitung von DatagridTest1 in c# - beachte die hinzugekommene Klasse NotifyPropertyChanged, von der bei mir alle Viewmodels erben.

    Dassis doch eiglich wieder ordentlich schnuckelig.
    Dateien
    Hi,

    vielen Dank für deine Mühen. Das mit IsSynchronisizedWithCurrentItem ist ja ein ziemlich heißer Tipp. Ich hab deine Anpassungen mal übertragen und bin ganz entzückt, wie fein das läuft - und dass sich der Codebehind sowie der Gehalt von Hardcodierung praktisch auf 0 reduziert hat.

    Ich weiß noch nicht, ob ich hierrauf nochmal zurückkomme, daher lasse ich den Thread erstmal unerledigt.
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.