Daten an ein 2. Fenster übergeben

  • WPF

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

    Daten an ein 2. Fenster übergeben

    Hallo zusammen!

    Nachdem nun wieder sehr viele Stunden mit dem tollen WPF verschwendet wurden, nur um ein paar Daten in einem 2. Fenster zu zeigen, bleibt mir wieder nur das Forum.
    In einer Klasse liegen 3 Obsevable Collections. Aus jeder davon sollen Teile in einem neuen Fenster angezeigt werden. WPF sei Dank ist das natürlich nicht so einfach. (und das ist ja auch gut so, wenn man den Experten glauben darf :cursing: )
    Der Plan sieht aktuell so aus, dass die benötigten Daten erst einmal in 3 kleine Observable Collection umkopiert werden.
    1. Collection => enthält immer 2 "Zeilen"
    2. und 3. Collection => enthalten je zw. 0 bis 10 "Zeilen"

    Diese 3 neuen Collections sollen nun in einem 2. Fenster in je einem eigenen DataGrid angezeigt werden, wenn eine Sub dies auslöst.
    Meine Versuche ein Projekt nach MVVM und mit RelayCommands aufzubauen waren nicht so sehr erfolgreich. Was ein unglaublicher Aufwand, um einen Button zum Arbeiten zu bringen! Weitere Versuche der Datenübergabe scheiterten auch. Oft natürlich nur C#-Code gefunden, der nach einer Übersetzung in Basic vor Fehlermeldungen nur so strotzte.

    Wie kann man denn nun Daten möglichst simpel an ein anderes Fenster übergeben, ohne gleich alles auf MVVM umzustellen?

    Gruß

    eddi

    eichseinet schrieb:

    Wie kann man denn nun Daten möglichst simpel an ein anderes Fenster übergeben, ohne gleich alles auf MVVM umzustellen?

    Nur so am rande. Ohne MVVM ist dies genau(!!) das gleiche vorgehen wie unter WinForms. Da ist überhaupt nichts anders.

    Interessant wäre nun auf was das erste Fenster gebunden ist. Die CodeBehind?

    Du kannst ja dem Constructor des zweiten Fensters einfach die Collections mitgeben. Das ist unter WPF nicht anders als unter WinForms.
    Wenn MVVM zum einsatz kommen würde, würdest du die Daten dann einfach anstatt dem Fenster der Klasse auf welche gebunden ist übergeben.

    Aber.... wie instanziierst du den ein neues Fenster?? Vieleicht liegt ja hier der Fehler. Ohne Code kann hier jeder nur raten.

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

    Unter Windows Forms habe ich Daten nicht übergeben. Sie wurden einfach global angelegt und so konnte z.B. Fenster 1 auf eine DataTable zugreifen und Fenster 2 dann halt auch. Nun musste bin ich ja von den DataTables auf die Objektbasierte Datenverarbeitung und die Collections umgesteigen. Der Versuch ObservableCollectins einfach in einem Modul global verfügbar zu machen scheiterte, weil in einem Modul nicht alles zur Verfügung stand. (weiss nicht mehr was genau)
    Eben hatte ich aber den Gedanken, ob man nicht einfach im 2. fenster den DatenContext einfach nur auf den Code Behind des 1. Fensters setzen muss, um an die Collection zu gelangen? (da erarbeite ich gerade ein Testprojekt dazu)
    Mein Code liegt z.Z. noch komplett im Code Behind des MainWindow. Das 2. Fenster soll dann hier aus einer Sub geöffnet werden, wenn die Bedingung dazu erfüllt ist.

    Gruß

    eddi

    eichseinet schrieb:

    Eben hatte ich aber den Gedanken, ob man nicht einfach im 2. fenster den DatenContext einfach nur auf den Code Behind des 1. Fensters setzen muss, um an die Collection zu gelangen?

    Fast - so klappt das nicht wirklich aber du kannst die Collections ja einfach in das zweite Fenster reinreichen.

    Du hast einfach Eigenschaften im Fenster 2 (Properties) und diese jetzt du nach/beim instaziieren des 2 Fensters. Fertig.

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

    Musste ne Weile weg, daher hat's jetzt lange gedauert. Mein Testprojekt steht inzwischen. Mich erstaunt es, dass man wie unter Forms auf die Elemente des 2. Fensters zugreifen kann.

    VB.NET-Quellcode

    1. Dim Fenster2 = New Window1
    2. Fenster2.Meine_Coll_Fenster2 = Meine_Coll
    3. Fenster2.Show()


    Das ist schonmal sehr hilfreich. Besonders schön wär's jetzt, wenn auch Daten zurück gesendet werden.

    VB.NET-Quellcode

    1. MainWindow.Meine_Coll

    funktioniert ja leider nicht. Oder kann man die Collections statt einfach zu kopieren anders verbinden? Auch eine simple Property vom Typ Boolean wär mir im Mainwindow schon genug, als Antwort vom 2. Fenster.

    Gruß

    eddi

    eichseinet schrieb:

    Mich erstaunt es, dass man wie unter Forms auf die Elemente des 2. Fensters zugreifen kann.
    Es geht doch auch hier nur um eine Klasse, die eine andere Klasse instanziiert und deren öffnetlich zugängliche Member manipuliert. Was ist daran so besonders?

    eichseinet schrieb:

    Auch eine simple Property vom Typ Boolean wär mir im Mainwindow schon genug, als Antwort vom 2. Fenster.
    Ich hab zwar keine Ahnung von WPF, aber dafür wurden u.a. Events erfunden. Window1 meldet, dass es sich nach der Instanziierung von Window2 für dessen Events interessiert und wenn Window2 ein Event mit entsprechenden Meldungen feuert, bekommt das Window1 mit und kann entsprechend (re)agieren.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Genau. VaporiZed hats ja schon auf den Punkt gebracht. Die WPF macht da nichts anders. In Endeffekt sind es immer Klassen und die Arbeiten/Funktionieren immer gleich.

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

    Nee.
    In Window2:

    VB.NET-Quellcode

    1. Public Event TestEvent()
    2. 'und irgendwann später:
    3. RaiseEvent TestEvent()

    und in Window1:

    VB.NET-Quellcode

    1. Dim Fenster As New Window2
    2. AddHandler Fenster.TestEvent, AddressOf Whatever
    3. '...
    4. Private Sub Whatever()
    5. MessageBox.Show("Window2 hat sich gemeldet.")
    6. End Sub
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Danke erst mal.
    War schon klar, dass das Event ins 2. Fenster muss. War nur mal allgemein als Beispiel gedacht. Mir war nur nicht bekannt, wie man in dem MainWindow dann da dran kommt. Wenn man's mal weiss is es ja ganz einfach. Aber 2h Internet haben mich leider nicht weiter gebracht. Immer nur allgemeines zu den Events.

    Schönen Dank euch beiden für die Hilfe. Damit wär mal wieder eine Etappe geschafft. Bin gesapannt welche Probleme noch auf mich warten...

    GRuß

    eddi