Laden...

Forenbeiträge von BeZi Ingesamt 153 Beiträge

05.03.2017 - 12:14 Uhr

Erst einmal einen schönen Sonntag,

nachdem ich jetzt (Naja ich will nicht sagen) ewig gesucht habe und auch hier im Forum anscheinend immer wieder die Fragen gestellt werden wie mache ich folgendes in Bezug auf Server Client wollte ich mal nachfragen welche Technologien aktuell eingesetzt werden. Ich selbst schreibe aktuell nur Desktop-Anwendungen und greife auf DBs zu. Wollte aber mein Wissen erweitern.

Wann nehme ich was: 🤔

  • Wann setze ich auf ASP.Net ?
  • Wann benutze ich einen Service ?
  • Was ist mit Rest und was mit WCF ?
  • Wann nehme ich Nod.js ?
  • Wie versende ich heutzutage Daten am besten? Serialisiere ich ganze Klassen(Listen) oder wann -nehme ich eine "nur" einen einfachen Byte-Stream?
  • Was nehme ich für ein modernes Chat-Programm ?
  • Wie sagt der Client dem Server Ich brauche folgende Daten?
  • Was verwende ich als Server wenn ich sowohl mit einem WPF-Client als auch per Browser zugreifen möchte, oder sogar mit einer Handy-App zugreifen möchte?
    -Wo liegen die Unterschiede der eingesetzten Technologien?

Ich glaube das würde vielen schon helfen sich in die richtige Technologie einzulesen.
Falls es das schon geben sollte. Vielleicht könnte man den Link hier teilen.

Wenn man eine Übersicht über die verschiedenen Technologien erstellt würde das hier bestimmt schon einigen helfen. Kein Quellcode sondern nur über die eingesetzten Technologien.

Mich selbst interessiert es z.B. (siehe Anhang)

Ich habe ein Client-Programm das mit einem Server kommunizieren soll. Der Client schickt eine Anfrage an den Server, der die entsprechenden Daten an den Client sendet. Was verwende ich für die Kommunikation TCP? Wahrscheinlich - Aber wie sehen die Daten aus die ich versende? Wie sagt der Client dem Server - Ich brauche diese Daten. Der Server kann nicht einfach eine DB sein in diesem Fall. Dazu finden zu viele Berechnungen statt.
Vielleicht will ich auch mal Ergebnisse vom Server Ergebnisse per Handy abfragen. Was braucht der Server dafür ? Wie sieht hier die Kommunikation aus. Wie ich schon sagt kein Code sondern moderne Technologien interessieren mich.

Vielen Dank vielleicht bringt das einigen hier was. Mir würde es was bringen.

24.07.2016 - 16:52 Uhr

??? 🤔

Also erstens wie ich was und wo einsetze bleibt ja eigentlich mir überlassen. Wenn ich eine Klasse "Benutzer" habe und dessen Felder jetzt dynamisch gestalten will, aber das so noch nie gemacht habe und vorher waren diese Felder fest definiert, dann finde ich das eine vollkommen berechtigte Frage. - Dachte eigentlich dafür ist ein Forum da... Fragen stellen zu können, bzw. zu helfen zu können wenn ich kann. Wird mir jetzt ein Vorwurf gemacht das ich eine bestimmte Sache noch nicht eingesetzt habe ? WOW.

Und welche Argumentation? Für was? Wieso zielführend?

Wenn ich nur 1, 10 , 100 Objekte als Max. definiert hätte, hätte das eigentlich KEINE Auswirkung auf die Gestaltung der Klasse haben dürfen (sollte)... das macht in meinen Augen gute Programmierung aus. Die Objekte sollten eigentlich bei 1 , bei 1000 oder eben 100.000 Objekten gut aufgebaut/sein (und dann wenn nötig gut skalieren).

Den Rat der Helfer in Bezug auf die DB brauche ich an dieser Stelle nicht (Und ich weiß das es gut gemeint ist und das ist auch gut so). Dennoch war das nicht meine Frage. (Was in keinster Weiße aber abwerten klingen soll). Wo ich was und wie von meinen Algorithmen berechne auch nicht. Ich habe lieber eine gezielte Antwort auf eine gezielte Frage. Und meine Frage war jawohl gezielt. Ich will nicht den Leuten ihr wertvolle Zeit klauen....

@Abt: Es ist fast schon ironisch das man sich Gedanken macht, wie kann ich was besser machen, tüftelt ein wenig, und dann fragt man in einem Forum nach....und dann solch eine Antwort .... krass.

Zurück zu meinem Post: Ich lasse meine Datenbankfelder dynamisch erstellen aus meinem Programm. Diese (Spalten) - Felder möchte ich dann in meiner Klasse nutzen. Und da ich das eine dynamisch erzeuge und nicht fest definiert ist, möchte ich das ganze auch in der Klasse dynamisch halten. Mehr wollte ich nicht wissen. Und darüber wollte ich mich informieren / reden.

24.07.2016 - 14:07 Uhr

Also erstmal vielen Dank das ihr euch das alles durchgelesen habt.

Das was ich schreiben will existiert schon in Version 1. Ich will das ganze jetzt nur noch "pimpen" indem ich wie ich schon sagte bei der Klasse Flexible sein will, mehr nicht.

Die Sache mit den anzahl der Objekten der Klasse kann ich in diesem Fall nicht umgehen. Darauf brauche/wollte ich auch keine Antwort. Trotzdem danke 😉

Das einzige was ich wissen wollte ist die Sache mit der "flexiblen" Klasse.

Object wäre ok....
Den Unterschied zwischen Generics und Dictionary... habe weder mit dem einen noch dem anderen gearbeitet... Genau das ist ja das was ich wissen wollte.
Ich muss halt flexible sein.

Die Klasse könnte 5 aber genauso 30 "Felder" enthalten... Ja gut und dann davon halt dann 50000 Objekte.
Bzgl. Performance.... bei der Anzahl der Objekte darf Berechnungen immer länger dauern. Performance heißt für mich in diesem Fall wie gut ich mit der Anzahl umgehe. Aber wie ich schon sagte das ist 2. Ranging.

Was interessant ist, ist die Performance aus dem die Klasse (oder das Objekt) besteht....

24.07.2016 - 12:19 Uhr

Ich bin für alles offen....

Das mit der Performance passt alles für mich.... Es gibt bestimmte Algorithmen, die alle Objekte beachten müssen. Da gibt es kein Problem ob der User kurz warten muss. Das ist in diesem Fall ok.

Ich wollte nur Fragen was in diesem Fall die Beste Lösung ist bzw. was Ihr verwendet würdet.

"Object" finde ich auch nicht so geschickt wenn man es mit Generics vergleicht.... also schon besser

Dictionary noch nie eingesetzt.

24.07.2016 - 10:40 Uhr

Merci für die Antwort,

leider ist es so das die Anzahl der Objekte benötigt werden. Auch wenn ein Benutzer des Programms nicht alle Objekte auf einmal sieht so werden dennoch Operationen damit innerhalb des Tools ausgeführt. Leider haben die Objekte eine gewisse Abhängigkeit.

Die Felder der Datenbank gibt eigentlich MINDESTENS (also eher mehr) die Felder der Klasse vor.
Um das ganze zu vereinfachen gebe ich der Datenbank (die Dynamisch erzeugt wird beim ersten starten des Programms) nur die Möglichkeit von (Int, double, boolean, Datetime, text) vor. Diese Info kommt aus einer serialisierten "Spaltenklasse" (--> Spaltenname, Typ, evtl. Länge)

Die Frage ist halt nun ob "Object" das richtige ist.

24.07.2016 - 09:11 Uhr

Guten morgen,

ich habe eine Frage zu einem Aufbau einer Klasse deren Felder noch nicht 100% sicher ist.

Wenn ich ja eine Klasse "Mitarbeiter" erstellen würde würde diese ja vielleicht so aussehen:



class Mitarbeiter
{
   private string _vorname;
    private string _nachname;
    private int _alter;
    private Abteilug _abteilung;
    // etc...

    public Mitarbeiter(string Vorname, string Nachname, int Alter, Abteilung Abteilung)
    {
        _vorname = Vorname;
        _nachName = Nachname
        // etc... wird ja jedem klar sein
    }

    // Methoden.....
}


Das ganze könnte ich dann in einer Datenbank (Tabelle Mitarbeiter) speicherm mit den jeweiligen Feldern..... (ID, Vorname, Nachname,.... )

So jetzt zu meiner Eigentlichen Frage:

Was ist wenn ich eine Klasse erzeugen will von der noch nicht bekannt ist was für einen Inhalt/ Eigenschaften hat.
Der Inhalt der Klasse Eigenschaft kommt teils aus einer Datenbank. Was vielleicht auch noch erwähnenswert wäre.... Von der Klasse Dinge wird es später über 50.000 Objekte geben....



class Eigenschaft
{
    private object _Eigenschaft = new object();

    public Eigenschaft()
    {

    }

    // Methoden.....
}

class Ding
{
    private List<Eigenschaft> EigenschaftenListe = new List<Eigenschaft>();

    public Ding()
    {

    }

    // Methoden.....
}


Erstelle ich dann solch ein Konstrukt ? Ist das kompletter Mist oder wie würdet ihr vorgehen.

Bin für alle Ideen offen..

Vielen Dank

19.07.2016 - 08:09 Uhr

Guten morgen,

ich habe die letzten Tage versucht einen Parallel.ForEach Schleife zu bauen.

Das sollte ja ansich nicht das Problem sein, dachte ich zumindest. Hier mal mein Code



        ValueList myValueList  = new ValueList (); //Liste von Eigenen Objekten (ähnlich Punktwerte)

        int counter = 0;
        
        private void CalcParllelFor()
        {
            counter  = 0;
            myValueList  = new ValueList ();    // Liste leeren


            int count = A_ObjektList.Count;  //Liste von Eigenen Objekten

            Parallel.ForEach(A_ObjektList, CurrentObj => GetValuesParallelFor(CurrentObj));
        }

        private void GetValuesParallelFor(A_Objekt obj)
        {
            counter++;                                                    // zählt Schleifendurchgänge

            ValueList tmpwertlistListe = obj.BerechneWasMitEinemObjekt();    // Methode 

            myValueList.AddValuesToList(tmpwertlistListe );                  // füge die Werte der globalen Liste hinzu.
        }


Mein Problem ist das sich die aufrufe irgendwie "verschlucken" --> counter entspricht nicht der Anzahl der Schleifendurchläufe die er machen sollte. Ja und bei jedem ausführen ist counter unterschiedlich groß. Er berechnet auch nicht alles, da in myValueList auch unterschiedlich viele Werte stehen. Wie umgehe ich das Problem? Wahrscheinlich hängt es ja mit dem gleichzeitigen Zugriff von myValueList zusammen. (Nehme ich an).

Wenn ich alle Berechnung rausnehme aus der Methoden "GetValuesParallelFor" stimmt counter überein mit A_ObjektList.Count.

Kann mir jemand helfen ? Fettes merci im Vorraus.

20.03.2016 - 12:34 Uhr

@TH69 Gut also wenn das so ist wie ich vermute habe dann muss die "Logik" in meine Klasse: Autoliste (Suche/Hinzufügen etc). umd VM & View sind rein für die "Betrachtung" zuständig.... (gut "Filtern" könnte man evt. in das VM schieben da es ja "nur" eine "Subliste" ist, aber Hinzufügen, Entfernen etc. Eigentlich in das Model). Ich sehe VM mehr als --> Ich blende was aus oder ein etc...

@Erfinder des Rades: Das Beispiel mit dem Auto war ein vereinfachtes Beispiel..... um mein Projekt verständlicher rüberzubringen... 😉

20.03.2016 - 10:47 Uhr

Wie gesagt: Für dein Problem der parallelen Listenhaltung gibt weder 4-Gewinnt noch TicTacToe wirklich was her, denn beide Spiele benötigen sowas garnet.

Ja und gerade weil es das nicht gibt bei mir frage ich nach einem Lösungsansatz.

Was ich gerne mache ist angenommen ich erstelle eine Klasse User, dann implementiere ich auch eine eigene Klasse UserListe die eigentlich aus nichts anderem besteht als aus einer Liste von User --> List<User> und implementiere alle möglichen Methoden wie filtern/Daten abändern etc.

So und genau das habe ich auch in meinem Projekt... (nur halt nicht User sondern Elementlist --> Liste<Base> ) kann ja sein das das schon "übertrieben/falsch" ist. Finde ich aber logisch da alles sauber gekapselt ist (IMO).

So und ich bin davon ausgegagen das ich nun eine View für meine verschiedenen Baseelemente erstelle und dann eine eigene View für die Liste.

Oder besseres Beispiel:
Klasse Auto

Klasse Mercedes : Auto
Klasse BMW : Auto
Klasse Audi : Auto

Klasse Autoliste --> List<Auto> (inkl. Add, Remove, Search, Filter / etc.)

So und nun die ViewModel und Views
Klasse BaseViewModel (keine View)

Klasse Mercedes_ViewModel (greift auf Klasse Mercedes zu) -> View -> Bild von Mercedes
Klasse BMW_ViewModel (greift auf Klasse BMW zu) -> View -> Bild von Mercedes (ne Spaß BMW)
Klasse Audi_ViewModel (greift auf Klasse Audi zu) -> View -> Bild von Audi

Klasse Autoliste_ViewModel --> was mache ich hier ??? Autoliste oder List<BaseViewModel>

Mein Gedanke war ich setze auf Autoliste und der Templateselektor "regelt" den Rest. --> Sprich ich arbeite NUR mit Autoliste und nicht den VIEWS. Das funktioniert aber nicht da meine Views zwar angezeigt (Mercdes/BMW/AUDI) werden aber"leer" sind (Keine Infos).
Darum geht es mir. Und ob es so richtig ist weiß ich leider auch nicht.

Nur so war für mich bisher klar das die View unabhängig von dem Model angezeigt wird....
Ach ja für mich sind die Klasse Auto / Mercdes/BMW/Audi und Autoliste die Models

20.03.2016 - 08:42 Uhr

Guten morgen und danke für die Beiträge.

Hier ist das ganze MVVM Pattern nur der Teil der in Präsentationsschicht steht.
Also das ViewModel und der View haben erstmal überhaupt nichts mit der Businesslogik usw zu tun.
MVVM ist nur die Sicht auf die Daten.
Und dementsprechend ist das ViewModel auch nur der Teil der Anwendung der notwendig ist die Ansicht zu treiben.

Also dann sieht es ja so aus als hätte ich es richtig verstanden... das MV ist für das verhalten der View verantwortlich und bildet abstrakt ein Model ab. (So wie ein Model auszusehen hat)

Bzgl. dem Beispiel des 4 Gewinnt: 1 finde ich es NICHT übertrieben wie es aufgebaut ist... Es wird einem sofort klar wenn man den Code wieder anschaut, 2 sind auch Unity-Tests enthalten.
und das wichtigste: ES IST ALS BEISPIEL zu verstehen.

Das gute an objektorientierter Programmierung ist ja die "Welt" zu vereinfachen und so abzubilden wie sie ist. Klar kann man 4 Gewinnt auch '"kleiner/kürzer" implementieren. Aber das ist nun mal nicht das vorgehen und nicht das Ziels der Videoreihe.
Ich kann auch 4 Räder nehmen, je 2 mit einer Achse verbinden, das ganze anschieben und sagen ich bin mobil und komme ans Ziel (naja zumindest auf einer Geraden). Jetzt mache ich mir mehr arbeit bei ne Lenkung ein, einen Motor und schon bin ich etwas flexibler. Ob es not tut muss jeder für sich entscheiden - ich denke schon (vor allem wen man es sauber erlernen will)

Naja egal jetzt.

Ich weiss nur ich bin meiner Lösung keinen Schritt weiter...

Wer sich die Videos angeschaut hat, sieht das er in das MainViewModel - 2 SpielerViewModels Packt, wieso packt er hier nicht eine Liste von Spielern rein ? Wenn ich doch im SpielerViewModel
auf einen Spieler zurückgreife wieso nicht dann im Spiel auf einer Liste zugreifen ?

19.03.2016 - 17:33 Uhr

Weiß ich nicht... finde seine Arbeit aber als sehr sehr gut weil er es eigentlich mega sauber erklärt, + den Code dazu... Weiß nicht, glaube ich nicht....
Da er das ganze mega professionell macht finde ich es Top.

Als Erklärung für mich warum die Funktionalität ins Model sollte --> was ist wenn verschiedene System benutzt werden nicht nur WPF. Evtl. eine andere Oberfläche, z.B. DirektX, Dann müsste ich ja die Logik für jedes System extra neu implementieren.

19.03.2016 - 16:54 Uhr

Hmmm,

Also es gibt wunderbare Videos zum Thema MVVM https://www.youtube.com/watch?v=iX2hrsWsTT0

Hier wird komplett 4 Gewinnt als gutes Beispiel erklärt (ist auch eine ganz gute Reihe, aber entsprechend lang)... Finde ich mit das beste "Tutorial" was ich je gefunden habe.... Hier wird in den Models (nur als Beispiel für hier) ein "Spielstein in eine Spalte fallen gelassen" also als Methode... Sprich für mich ist das die Geschäftslogik und ist NICHT im VM implementiert. Verstehe ich jetzt was falsch ?

Ich war bisher der Meinung das wenn ich eine Liste in einem eigen Objekt speicher und diese Objekte der Liste manipuliere, egal auf welche Weise. Dann tue ich das alles im Model. Das VM hilft nur für die Anzeige. Sonst würde ja bald das Model keinen Sinn mehr machen.

Also war ich der Meinung ich erstelle mir ein Objekt das eine Liste von meinen Objekten enthält. Das ViewModel implementiert dieses "Listen-Objekt"

Ich habe nach den Videos MVVM als saubere Lösung angesehen... (Die meisten Beispiele kann man ja in der Pfeife rauchen da sie das Thema mit einer Klasse und einer Textbox versuchen abzuhandeln).... Leider kann ich das Beispiel nicht ohne weiteres auf mich anwenden (ich versuche mich ja nicht an dem Spiel).... Und leider wird auch nicht (ist ja auch schon speziell) auf meine Frage eingegangen - logisch.

Wohin kommen denn sonst Datenbankanfragen? Sollen die jetzt auch ins VM? Wohl eher nicht. Ich habe es so verstanden das das VM die "Geschäftslogik für die View ist" Also wie soll sich die View verhalten. Ganz nach dem Motto "Form follows Function" und Function wäre mein VM und Form mein xaml (Klingt komsich wegen WindowsForms).

Sehe ich das falsch?

19.03.2016 - 13:35 Uhr

Lieber ErfinderDesRades,

Ich sehe das Forum hier als Diskussionsgrundlage für ein Problem, für ein konkretes Problem, welches jemand hat (und in diesem Fall eines das ich habe). Ich habe von Dir nichts abgelehnt. Ich sehe aber keine neue Info die ich nicht schon habe... und ob Du auf dem Kriegsfuß mit MVVM stehst, kann und will ich nicht beurteilen und ist eine Meinung (Ja Deine, die Du natürlich haben kannst und was ich auch I.O. finde). Aber das bringt MICH nicht weiter (und nimm das bitte als konstruktive Kritik - also nicht böse gemeint). Und ob es Spaßig ist oder nicht mit Listen etc..... ??? Ja gut, bringt mir aber auch nichts und bringt mich meiner Lösung nicht weiter. Ich will etwas verstehen wieso und weshalb... Ich habe auch nichts abgelehnt ????

Bzgl. des "dogmatischen Denken"... Ich würde nicht nachfragen wenn ich so denken würde... Ich fragte nach einer Lösung oder besser Lösungsansatz oder noch besser ein Richtung..... Funktioniert es so im Sinne des Erfinders (MVVM - Pattern)

Aber es kommt mir gerade so vor das Du es ablehnst so etwas mittels MVVM-Pattern umzusetzen weil Du es nicht gut findest/oder magst oder vielleicht auch in diesem Fall nicht einsetzen würdest. (So liest es sich zumindest). Ich würde es gerne in MVVM umsetzen um es zu verstehen und ob es möglich ist und wenn ja wie... und wenn nein auch ok. Aber ich will eine Richtung. So wie ich jedem anderen zeigen würde wie es geht wenn ich es wüsste...

Aber egal ich will hier keine Diskussion dafür ist mir meine und auch Deine Zeit zu schade und bringt mich nicht näher an mein Ziel....

Ich habe schon WPF-Anwendungen geschrieben ohne das MVVM Pattern zu verwenden. Das ist nicht das Problem. Wirklich nicht... und wie in meiner Ausgangsfrage auch zu sehen ist verwende ich mehrere Views, als auch ViewModel....

Ja ich bekomme es hin das alles ohne ViewModel umzusetzen, aber vielleicht will ich das ja genau nicht weil:.... ich einfach mal (und glaub mir ich versuche mich an dem Projekt nur daran weil ich das Pattern für mich LERNEN will - und das Projekt einfach mal sauber gliedern will.

Wenn jemand hier sagt das IST der falsche Ansatz wie du das machst. Mach es "SO", denn SO macht es mehr sinn (mit ODER ohne MVVM) dann sehe ich es mir an ich bin dafür offen. Ich will ja was lernen. Ganz nach dem Spruch: Viele Wege führen nach Rom. Aber vielleicht will ich einfach mal eine "Landkarte" für das Ziel. Also etwas an dem ich mich entlang-hangeln kann.

Als Antwort auf meine Frage: "Mach nur alles in ViewModels... oder verwende es mal nicht" bringt mich nicht wirklich weiter.... Sorry

Es gibt ein paar Videos im Netzt in Bezug auf MVVM (mag da hingestellt sein ob es was mit meinem Problem zu tun hat oder nicht)... Aber es wir immer erst der Core mit seinen Models geschrieben und danach das VM, die auf das Model aufbauen. Und wenn ich es noch richtig weiß wird die meiste Logik in das Model gesteckt. Wenn ich jetzt aber in einer Liste suchen soll.... Hmm wieso soll dann diese Logik in das VM und wenn ich ein neues Element hinzufüge ?

19.03.2016 - 11:12 Uhr

Hmmm, erstmal Danke, aber die Antwort (und das meine ich jetzt nicht böse oder sonst irgendwie negativ) ist nicht gerade befriedigend....

Was ich mit MVVM bisher mitbekommen habe (ja und ich weiß das man es anders machen kann) ist das man halt alles in kleine Views packt und das solange aufbaut von kleinen einzel Elementen bis zur kompletten View....

In Bezug auf "Die Models haben sonst nichts mehr zu tun"... ja da hänge ich auch noch ein wenig... Aber es muss so gehen sonst würde das komplette MVVM-Pattern KEINEN Sinn machen...

19.03.2016 - 09:50 Uhr

Sali Community,

Ich hoffe ihr könnt mir weiterhelfen. in Bezug auf meinen Thread http://www.mycsharp.de/wbb2/thread.php?threadid=116621 .

Ich fange eigentlich erst richtig an (oder versuche es zumindest) MVVM zu verstehen (Versuche es 🙂 )

Ich habe versuche gerade folgendes: ( Ich verweise auf meine X( exzellente Zeichnung im Anhang - haha - aber ich hoffe das hilft )

Ich habe ein 2 Projekte: Einmal ein Core-Projekt mit meinen Core-Klassen und eine ViewProjekt mit meinen Views (Ist ja auch eigentlich egal und für mein Problem irrelevant).

So... ich habe Eine Basisklasse: Base von dem 3 Kinder erben. Klasse A / B / C. Nun habe ich noch eine weitere Klasse: Elementlist die aus einer Liste von Basisklasse besteht (um Objekte von A / B / C aufnehmen kann.). Hier sollen auch suchen nach Elemente implementiert werden etc nach A / B / C.

Soweit so gut. nun habe ich ein alle meine Views: ViewModel_1 ist gebunden an ein Objekt von Klasse A - ViewModel_2 an Objekt von Klasse B etc... Alle Views sind abgeleitet von ViewModelBase

So nun kommen ich langsam zu meinem Verständnis-Problem:

Ich habe nun eine View --> ViewModel_Elementliste (im großen und ganzen eine ListView im xaml) die möchte ich an Objekt von Klasse Elementlist hängen. Elementlist ist ja eine Liste von Klasse A / B oder C.

Muss ich nun in der ViewModel_Elementliste Objekte erzeugen von meinen Views (ViewModel_1 , ViewModel_2, etc) oder kann ich einfach Objekte der Klasse A / B oder C erzeugen ?

Es kann ja sein das ich eine Methode in implementieren muss die mir erst ein nach dem erzeugen eines Objektes A erst ein ViewModel_1 erzeugt und das wiederum zu einer Liste von ViewModelBase hinzufügen?

Was mir nicht klar ist. Ich würde Suchfunktionen im Core implementieren und NICHT in den ViewModels (oder ist das falsch vom MVVM-Ansatz?)

Was gehört nun in mein ViewModel_Elementliste? Erzeuge ich hier ein Objekt von meiner Klasse Elementlist oder eine Liste von ViewModelBase.
Für was bräuchte ich dann suchfunktionen im Core ? Wie füge ich elemente meiner Liste (Elementliste oder List<ViewModelBase>) hinzu ?

Ist das so verständlich ? Der TemplateSelektor der Implementiert ist muss dementsprechend ja auch angepasst werden. (Er funktioniert soweit).

Oh man ich hoffe ich konnte es gut genug erklären bzw. verständlich. Ich glaube das angehängte Bild sagt fast mehr aus.

Kann mir jemand (ich möchte es verstehen) sagen wie ich es zu implementieren habe also was RICHTIG ist?

Fettes merci im Voraus.

22.02.2016 - 09:37 Uhr

Sali,

ich beginne gerade mich mit WPF und MVVM richtig zu beschäftigen und habe folgende Frage bzw. bräuchte Hilfe.

Ich möchte innerhalb einer ListView verschiedene Objekte ( ViewModels) unterhalb mir anzeigen lassen:

Ich glaube als Analogie könnte man sagen wie in jedem Chat.... Wha..sApp

Da habe ich ja auch Textnachrichten dann mal ein Bild dann mal wieder 2 Textnachrichten und dann vielleicht ein Standortanzeige.

So ich wollte etwas ähnliches (andere Objekte). Ich habe für meine Objekte verschiedene ViewModels. Ich weiss jetzt nur nicht wie ich die am geschicktesten untereinander bringe...

Was nehme ich anstatt einer ListView?

Ich habe Objekt A davon Leitet sich Objekt B (+VieModel) und Objekt C (+ViewModel) ab.

Jetzt habe ich von B und C ViewModels erzeugt. Das bringt mir ja wahrscheinlich nicht allzuviel. für eine Liste, oder ?

Brauche ich für Objekt A auch ein ViewModel ? Und kann dann Irgendwie eine Collection von diesem erzeugen ?

Hmm ich hoffe man versteht was ich will. Bzw. kann mir einer Helfen ?

Merci

06.08.2015 - 16:47 Uhr

WOW, OPS..... Übersehen, sorry

und fettes merci nochmals

megacool... das nenn ich Hilfe

06.08.2015 - 15:53 Uhr

Sali @Taipi88 und merci...

Habe es getestet und es funktioniert doch, hatte einen fehler beim übernehmen...

Wie bekomme ich es hin noch weitere Spalten nach dem gleichen Schema hinzuzufügen. Es ist mir nicht ganz klar....

und danke nochmals.... Echt top

06.08.2015 - 14:15 Uhr

Also irgendwie bekomme ich es nicht hin, ich habe folgendes:



            DataTable tmpSortTbl = tmpTbl.AsEnumerable()

            .GroupBy(A_R => new { ES = A_R.Field<string>("SP1") })
            .OrderBy(f => f.Key.ES).ToList()
            .SelectMany( a1=>a1

                .GroupBy(A_R => new { AR = A_R.Field<string>("SP2") })
                .OrderBy(f => f.Key.AR)
                .SelectMany(a2 => a2

                    .GroupBy(T_C => new { TC = T_C.Field<string>("SP3").Split(' ')[1] })
                    .OrderBy(f => f.Key.TC)
                    .SelectMany(a3 => a3

                        .GroupBy(T_C => new { TC = T_C.Field<string>("SP4") })
                        .OrderBy(f => f.Key.TC)
                        .SelectMany(a4 => a4

                                .GroupBy(M_A => new { MA = M_A.Field<string>("SP6") })
                                .OrderByDescending(f => f.Key.MA)
                                .SelectMany(a6 => a6

                                .GroupBy(S_T => new { ST = S_T.Field<string>("SP7") })
                                .OrderBy(f => f.Key.ST)
                                .SelectMany(a7 => a7

                                    .GroupBy(M_L => new { ML = M_L.Field<DateTime>("SP8")})
                                    .OrderBy(f => f.Key.ML)
                                    .SelectMany(a8 => a8)
                                    )
                                )
                            )
                        )
                    )
                )
            ).CopyToDataTable();


also mehrere Spalten. Alle diese werden nur nach dem Alphabet sortiert... Aber leider nicht nach datum ? Ich weiss auch leider nicht wie ich dieses Datum dort hineinbekomme.....

Ich sehe den Wald wohl vor lauter Bäumen nicht....

ARGGGGHHHHHHHH - HELP 🤔

06.08.2015 - 08:07 Uhr

Erstmal merci Taipi88,

ich habe eine Datatable und diese muss dann später nach der Sortierung wieder in eine Datatable, also am schluss ".CopyToDataTable();"

ich bekomme das so nicht hin mit foreach, da Foreach keinen Rückgabewert hat.
Wenn ich es durchlaufen lasse ist es auch so das er erst nach datum sortiert und dann nach SP1 ich will aber alle Werte innerhalb SP1 zusammen gesetzt und dann sortiert nach den Blöcken in SP1

05.08.2015 - 22:57 Uhr

Das witzige ist das die eingabetabelle von Lando eigentlich schon das Ergebnis wiederspiegelt so wie es hinten rauspurzeln soll... Egal wie ich sie anlege



SP1  SP2    SP3     SP4         DAT1
A      C       ..     ..     1.1.2000               <-----
A      C       ..     ..     1.1.2004
A      C       ..     ..     1.1.2008
A      D       ..     ..     1.1.2006

B      C      ..      ..    1.1.2002
B      D      ..      ..    1.1.2006
B      D      ..      ..    1.1.2008


ersten Eintrag geändert:
auf 2003 dann erwarte ich folgende Ausgabe



SP1  SP2    SP3     SP4         DAT1

B      C      ..      ..    1.1.2002
B      D      ..      ..    1.1.2006
B      D      ..      ..    1.1.2008

A      C       ..     ..     1.1.2003              <-----
A      C       ..     ..     1.1.2004
A      C       ..     ..     1.1.2008
A      D       ..     ..     1.1.2006


05.08.2015 - 20:37 Uhr

Ich habe das Beispiel nun getestet und muss leider sagen das es so nicht funktioniert.

Von jeder Spalte muss es einen Rückschluss auf das kleinste Datum geben.

Bei mir wird nur jede Spalte alphabetisch sortiert ...

Ich weiss es lässt sich schwierig ausdrücken....

05.08.2015 - 16:12 Uhr

Danke erstmal für die Antwort,

Ich glaube aber nicht.

Jeder Spalte (außer der Datumspalte) muss mit der Datumsspalte sortiert werden.

Also erst SP1 nach Datum - innerhalb davon SP2 mit Datum und innerhalb davon SP3 mit Datum....

Es kann sein das C aus SP2 ind SP1 A und B vorkommt....

05.08.2015 - 15:23 Uhr

Hmmm die frage die sich mir jetzt stellt, versteht man mich nicht oder ist das in LINQ nicht möglich ?

05.08.2015 - 09:18 Uhr

Tag die Damen und Herren,

ich hoffe mir kann jemand helfen der sich gut mit LINQ auskennt....

Ich habe eine Datatable und diese möchte ich sortieren anhand von mehreren Spalten UND einer Datumspalte. Das wäre jetzt nicht das Problem, aber die Datumspalte muss bei jeder anderen Spalte mit abgefragt werden.

Eine Tabelle hat mehrere Spalten und eine Spalte mit Datum...

Jetzt müssen immer Gruppierungen erstellt werden

diese Gruppierungen müssen dann nach Datum sortiert werden.

SP1 - komplett A kommt vor B weil A mit kleinstem Datum beginnt... also ALLE A nacheinander, egal ob ein B dann zwischen den A liegt...

SP2 - komplett C vor D weil kleinstes Datum C kleiner als kleinstes Daum von D , egal ob ein D dann zwischen den C liegt...

SP3 ...... usw....

SP1  SP2    SP3     SP4         DAT1
A      C       ..     ..     1.1.2000
A      C       ..     ..     1.1.2004
A      C       ..     ..     1.1.2008
A      D       ..     ..     1.1.2006

B      C      ..      ..    1.1.2002
B      D      ..      ..    1.1.2006
B      D      ..      ..    1.1.2008

Ich hoffe das ist verständlich....

ich bekomme das nicht mit dem Datum hin, also das binden an alle Spalten mit dem Datum


            DataTable tmpSortTbl = tmpTbl.AsEnumerable()

                    .GroupBy(M_A => new { MA = M_A.Field<string>("SP1")})
                    .OrderBy(f => f.Key.MA)
                    .SelectMany(a2 => a2
                        .GroupBy(S_T => new { ST = S_T.Field<string>("SP2") })
                        .OrderBy(f => f.Key.ST)
                        .SelectMany(a3 => a3
                            .GroupBy(T_C => new { TC = T_C.Field<string>("SP3")})
                            .OrderBy(f => f.Key.TC)
                            .SelectMany(a4 => a4
                                        .GroupBy(A_R => new { AR = A_R.Field<string>("SP4") })
                                        .OrderBy(f => f.Key.AR)
                                        .SelectMany(a6 => a6
                                                .GroupBy(E_S => new { ES = E_S.Field<string>("SP5") })
                                                .OrderBy(f => f.Key.ES)
                                                .SelectMany(a8 => a8                                                        
                                         )
                             )
                       )
                 )
            )

               .CopyToDataTable();

            return tmpSortTbl;

Fettes merci

28.02.2015 - 12:24 Uhr

DataGridView in WPF ???

25.02.2015 - 17:51 Uhr

Ja bei Windows Forms konnte man aber die Splaten Zeilen und Zellen auch direkt anprechen was so wie ich es gelsen habe wohl nicht geht.....

Das kann doch nicht sein... Wenn ich es ohne Binden erstellen will kann ich die Zellen direkt ansprechen Alla DataGridView....

25.02.2015 - 17:37 Uhr

Hmmm komisch ich dachte es wäre verständlich 🤔 ????

"Ich bekomme es leider echt nicht hin das zu binden...."

Wie Binde ich meine Klasse(n) an die Tabelle? Und nein ich habe keine Tabelle mit Monatspalten und Namen das ist ein Screenshot aus einem Excelfile den ich schnell erstellt habe....

25.02.2015 - 15:32 Uhr

Tag an Alle,

ich hoffe mir kann hier geholfen werden. Ich suche schon den halben Tag und finde nichts richtiges.

Ich habe brauche eine Tabelle wie im Anhang....

Ich habe

Als Klasse habe ich aktuell einen Objekt (Person) mit Werten


class Wert
{
 public int Monat{get;set;}
public int Value {get;set;}
}

class Person
{
public string Name{get; set;}
public List<Wert> Werte {get;set}
}

class PersonListe
{
public List<Person> Werte {get;set}

....
....
}


Jetzt habe ich eine Liste von Personen die demensträchend werte haben.

Die Tabelle muss Spalten und Zeilen enthalten. In der erste Spalte sind die Namen der Personen und in den restlichen Spalten sind Monate (wie ich schon sagte siehe Anhang - ein Bild sagt ja meistens mehr als 1000 Worte)

Die Monate sind in diesem Fall fest und nummeriert (von -100 bis 0)... das heisst also nicht an ein Datum gebunden oder ähnliches.... Es könnte genausogut ein Integer sein (naja gut vorlaufend 😁 halt)...

Ich bekomme es leider echt nicht hin das zu binden und bekomme das alles im DataGrid nicht hin (Arggggggg, WO IST NUR DAS GUTE ALTE WINDOWS FORMS DataGridView hin.... ?( - Spaß ich weiss das es das nicht mehr gibt).

Kann mir jemand helfen.... Ich fange gerde erst an WPF (langsam) zu verstehen....

Fettes Merci im Vorraus

09.02.2015 - 21:28 Uhr

Die Sache ist folgende.

Ich brauche die Selection weil ich über den Index ein Diagramm (zedgraph - Windows Forms) zeichnen lasse.

Also jeder Eintrag in der ListBox entspricht einem Digramm (oder besser Inhalt der Daten).

Das ist das Problem. Is finished heisst in dem fall das die Daten im Diagramm auch eine andere Farbe erhalten....

Wie ich schon sagte. Ich finde es cool das das event gefeuert wird wenn ich die Radiobuttons ändere... das gleich müsste nur bei der Checkbox funktionieren.....

09.02.2015 - 17:05 Uhr

@ErfinderDesRades

Hi. ich wollte mich noch bei Dir bedanken für das Beispiel. Top wirklich

Habe allerdings noch eine Frage.

Wenn ich in der "obersten" ListBox (in dem alle Usercontrols eingebunden sind) das Evenet "SelectionChanged" abfrage dann feuert das gleiche Event auch wenn ich die Radiobuttons (Liste in der Liste) ändere... (Ich kann dieses Verhalten nicht nachvollziehen, was ich aber gut finde und auch benötige).

Wenn ich aber die CheckBox (isFinisched) setze wird das event nbicht gefeuert. Wie funbktioniert das, das das Event feuert wenn ich ein Radiobutton ändere und wie bekomme ich das Verhalten auch der Checkbox hin ?

Danke nochmals für das gute Beispiel, sowas ist einfach TOP

Ich habe das Projekt etwas überarbeitet und nochmal angehängt....

Ach ja gibt es die Möglichkeit das die oberste Liste das element auch selktiert wenn ein Radiobutton geändert wird bzw. die CheckBox IsFinisched ?

👍 😁

03.02.2015 - 07:44 Uhr

Hier wäre das Testprojekt....
Wie ich schon sagte irgendwie binmdet er die Radiobunntons nicht und ich finde den Fehler nicht..... ARGGGGGG

01.02.2015 - 07:57 Uhr

Hmmm, ja die Frage ist doch nachdem MrSparkle meinte ich solle mir das HierarchicalDataTemplate anschauen, ob ich das dafür brauche.

Das Controls sind richtig, nur die funktionalität funktioniert noch nicht ganz.
Brauche ich ein HierarchicalDataTemplate um eine List inerhalb einer Liste zu befüllen oder nicht ?

Jetzt bin ich etwas verwirrt... Geht mein Ansatz oder geht der so nicht ?

31.01.2015 - 16:13 Uhr

So ich habe jetzt mal das mit HierarchicalDataTemplate versucht, es wird mir auch richtig angezeigt alles.
Ich habe jetzt nur noch das Problem das mir die radiobuttons nicht den Status IsSelected der SecondList weitergeben....
Und ich verstehe wirklich nicht warum.....

Direkt nach dem Start wird mal alles korrekt angezeigt, außer die Auswahl der gesetzten Radiobuttons ( einer in jedem Listeneintrag ist initilisiert). Diese bleiben ALLE auf IsChecked = false. Und ich kann sei verändern.

Wenn ich im Style RelativeSource={RelativeSource TemplatedParent} raus nehme werden mir die richtigen Radiobuttons "gesetzt" aber ich kann sie NICHT mehr verändern....

Kann mir einer Helfen ..... Ich stehe gerade irgendwie aug dem Schlauch....


<Window x:Class="WpfTest_DataTaple.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:src="clr-namespace:WpfTest_DataTaple"
        Title="MainWindow" Height="800" Width="1024">
    
    <Window.Resources>

        <Style x:Key="CheckBoxListBoxStyle" TargetType="{x:Type ListBox}">
            <Setter Property="BorderBrush" Value="Transparent"/>
            <Setter Property="KeyboardNavigation.DirectionalNavigation" Value="Cycle" />
            <Setter Property="ItemContainerStyle">
                <Setter.Value>
                    <Style TargetType="{x:Type ListBoxItem}" >
                        <Setter Property="Margin" Value="2, 2, 2, 0" />
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate>
                                    <Border Background="Transparent">
                                    <Grid Width="40">
                                        <Grid.RowDefinitions>
                                            <RowDefinition Height="Auto"/>
                                            <RowDefinition Height="Auto"/>
                                        </Grid.RowDefinitions>
                                            <Label          Grid.Row="0" Content="{Binding Path=SecondName}" HorizontalAlignment="Center"/>
                                            <RadioButton    Grid.Row="1" Content="" HorizontalAlignment="Center"
                                                            IsHitTestVisible="False" Focusable="false"  
                                                            IsChecked="{Binding Path=IsSelected,RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"/>
                                        </Grid>
                                    </Border>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </Setter.Value>
            </Setter>
        </Style>
        
        <DataTemplate x:Key="MyTemplate" x:Name="MyTemplate" DataType="{x:Type src:SecondElement}">
            <StackPanel Orientation="Horizontal">
                <RadioButton  Margin="4,4,4,4" Grid.Column="2" IsChecked="{Binding Path=IsSelected, Mode=TwoWay}" Content="{Binding Path=SecondName}"/>
            </StackPanel>
        </DataTemplate>
        
    </Window.Resources>
    
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="60"/>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="60"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="20"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="20"/>
        </Grid.RowDefinitions>

        <DockPanel Grid.Column="1" Grid.Row="1">
            <DockPanel.Resources>

                <HierarchicalDataTemplate  DataType    = "{x:Type src:FirstElement}" 
                                          ItemsSource = "{Binding Path=SecondList}">
                    <Border Margin="4,4,4,4" BorderBrush="SlateGray" BorderThickness="1" Width="300" Height="Auto" CornerRadius="3">
                        <Border.Style>
                            <Style TargetType="Border">
                                <Style.Triggers>
                                    <DataTrigger Binding="{Binding Path=IsFinished}" Value="True">
                                        <Setter Property="Background" Value="Orange" />
                                    </DataTrigger>
                                </Style.Triggers>
                            </Style>
                        </Border.Style>
                        <Grid>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto"/>
                                <RowDefinition Height="Auto"/>
                            </Grid.RowDefinitions>

                            <Grid Grid.Row="0">
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="Auto"/>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="Auto"/>
                                </Grid.ColumnDefinitions>

                                <TextBlock Margin="4" Grid.Column="0" HorizontalAlignment="Center" Text="{Binding Path=FirstName}"/>
                                <CheckBox  Margin="4" Grid.Column="2" HorizontalAlignment="Center" IsChecked="{Binding Path=IsFinished}" Content="Finished"/>    
                            </Grid>

                            <ListBox Margin="4"  Grid.Row="1" Height="Auto" ItemsSource="{Binding SecondList}" ItemTemplate="{StaticResource MyTemplate}"
                                        Style="{StaticResource CheckBoxListBoxStyle}"
                                        SelectedItem="{Binding SecondElement, Mode=TwoWay}">
                                <ListBox.ItemsPanel>
                                    <ItemsPanelTemplate>
                                        <StackPanel Orientation="Horizontal"/>
                                    </ItemsPanelTemplate>
                                </ListBox.ItemsPanel>
                            </ListBox>

                        </Grid>
                    </Border>
                </HierarchicalDataTemplate >
                              
            </DockPanel.Resources>

            <WrapPanel>
                <ListBox x:Name="TR_Element" />
            </WrapPanel>
            
        </DockPanel>
        <StackPanel Grid.Row="1" Grid.Column="2">
            <Button  Click="Button_Click" Content="TestButton"></Button>

        </StackPanel>

    </Grid>
</Window>


und hier nochmal der Code dazu



        public MainWindow()
        {
            BuildList();

            InitializeComponent();
            
            TR_Element.ItemsSource = CompleteList.GetCompletFirstList();
        }

        private void BuildList()
        {
        
            SecondElementListe SL1 = new SecondElementListe();

            SecondElement a1 = new SecondElement("100", false);
            SecondElement b1 = new SecondElement("75",  true);
            SecondElement c1 = new SecondElement("50",  false);
            SecondElement d1 = new SecondElement("25",  false);
            SecondElement e1 = new SecondElement("10",  false);
            SecondElement f1 = new SecondElement("0",   false);

            SL1.AddElement(a1);
            SL1.AddElement(b1);
            SL1.AddElement(c1);
            SL1.AddElement(d1);
            SL1.AddElement(e1);
            SL1.AddElement(f1);

            FirstElement FE1 = new FirstElement("Karte 1", true, SL1.GetCompleSecondtList());
            CompleteList.AddElement(FE1);

            //  -----------------------------------------------------------

            SecondElementListe SL2 = new SecondElementListe();

            SecondElement a2 = new SecondElement("100", true);
            SecondElement b2 = new SecondElement("75", false);
            SecondElement c2 = new SecondElement("50", false);
            SecondElement d2 = new SecondElement("25", false);
            SecondElement e2 = new SecondElement("10", false);
            SecondElement f2 = new SecondElement("0", false);

            SL2.AddElement(a2);
            SL2.AddElement(b2);
            SL2.AddElement(c2);
            SL2.AddElement(d2);
            SL2.AddElement(e2);
            SL2.AddElement(f2);

            FirstElement FE2 = new FirstElement("Karte 2", false, SL2.GetCompleSecondtList());
            
            CompleteList.AddElement(FE2);
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            CompleteList.FirstListe[0].SecondList[2].IsSelected = true;
            CompleteList.FirstListe[0].SecondList[2].SecondName = "Test";
        }


und



    class SecondElement
    {
        public string SecondName { get; set; }
        public bool IsSelected { get; set; }

        public SecondElement()
        {
            SecondName = "";
            IsSelected = false;
        }
        public SecondElement(string Name, bool selected)
        {
            SecondName = Name;
            IsSelected = selected;
        }
    }
    class SecondElementListe
    {
        public List<SecondElement> SecondList { get; set; }

        public SecondElementListe()
        {
            SecondList = new List<SecondElement>();
        }

        public void AddElement(SecondElement SE)
        {
            this.SecondList.Add(SE);
        }

        public List<SecondElement> GetCompleSecondtList()
        {
            return this.SecondList;
        }


        public SecondElement GetSelectedItem()
        {
            SecondElement tmp = null;
            for (int i = 0; i < SecondList.Count; i++)
            {
                if (SecondList[i].IsSelected)
                {
                    tmp = SecondList[i];
                    break;
                }
            }
            return tmp;
        }
    }

    class FirstElement
    {
        public string FirstName { get; set; }
        public bool IsFinished { get; set; }

        public List<SecondElement> SecondList { get; set; }

        public FirstElement()
        {
            FirstName = "";
            IsFinished= false;
            SecondList = new List<SecondElement>();
        }
        public FirstElement(string Name, bool selected, List<SecondElement> liste)
        {
            FirstName = Name;
            IsFinished = selected;
            SecondList = liste;
        }
    }
    class FirstElementListe
    {
        public List<FirstElement> FirstListe { get; set; }

        public FirstElementListe()
        {
            FirstListe = new List<FirstElement>();
        }

        public void AddElement(FirstElement FE)
        {
            this.FirstListe.Add(FE);
        }

        public List<FirstElement> GetCompletFirstList()
        {
            return this.FirstListe;
        }

    }

Also es funktioniert alles, bis auf die Radiobuttons innerhalb eines Elements

Zur leichteren Vorstellung mal ein Screenshot

28.01.2015 - 07:15 Uhr

@MrSparkle - Äh ich habe meinen Beispiel Code ganz am Anfang oben gepostet (Dieser ist LAUFFÄHIG !!!!), ich wollte eigentlich nur klar machen (mit der Zeichnunng) was ich gerne für ein Element umsetzen möchte und ob das HierarchicalDataTemplate überhaupt dann das richtige ist. (Es gibt x Wege etwas umzusetzen, Du kannst nicht einfach sagen lies dir alles von HierarchicalDataTemplate durch, hier die Posts aus dem Forum.... Vielleicht ist es das garnicht was ich brauche, aber vielleicht ist es das....)
Und das ich nur ein Problem habe was die Anbindung der "Subklassen" betrifft.... Ich habe NIE gesagt das mir jemand den Code schreiben soll oder änliches..... Wenn Du den XAML Code unten anschaust wirst du sehen das es fast (mir fehlt ja ein kleiner Teil) der Zeichnung entspricht.

Eine Antwort... "Ja, genau dafür ist es da das HierarchicalDataTemplate das kann/sollte man damit so umsetzen" oder "Ah nein, da solltest du dann doch vielleicht was anderes nehmen".... Hätte vollenst ausgereicht....
Das eintige was ich jetzt weiss das ich zeit verloren habe und mich rechtfertigen muss obwohl ich KEINE "Regel" gebrochen habe... Denn ich ahbe nicht nach Code gefragt sondern ein Bild gepostet um es zu verdeutlichen.

27.01.2015 - 21:47 Uhr

Ich brauche soetwas

HAHA, ich verzeihung für die Zeichnung ging aber nicht besser auf die Schnelle, haha

Ach das ist eine Listbox und das andere sind Radiobuttons

27.01.2015 - 20:37 Uhr

Erstmal Danke für die Antwor.

Aber nein ich will keinen Treeview auch wenn es zuerst so aussieht von den Daten her.

Ich will nur eine Liste in der Elemente dargestellt werden in dessen andere Elemente dargestellt werden.

Die frage ist ob ich dazu dann das HierarchicalDataTemplate benutzen muss... und wie ich die Daten binde

27.01.2015 - 20:11 Uhr

Nabend,

bin gerade beim lernen was WPF betrifft und habe folgende Frag Ich habe ein Testprojekt mal angelegt.

Ich Objekte (SecondElement), diese habe ich in einer Liste (SecondElementListe), diese ist wiederum gespeichert in einem Objekt FirstElement, von denen mehre in einer FirstElementListe stecken:


    class SecondElement 
    {
        public string FirstName { get; set; }
        public bool IsSelected  { get; set; }

        public SecondElement()
        {
            FirstName   = "";
            IsSelected  = false;
        }
        public SecondElement(string Name, bool selected)
        {
            FirstName   = Name;
            IsSelected  = selected;
        }
    }

    class SecondElementListe
    {
        public List<SecondElement> SecondList { get; set; }

        public SecondElementListe()
        {
            SecondList = new List<SecondElement>();
        }

        public void AddElement(SecondElement SE)
        {
            this.SecondList.Add(SE);
        }

        public List<SecondElement> GetCompleSecondtList()
        {
            return this.SecondList;
        }
    }
    
// ------------------------------------------------------------------

    class FirstElement
    { 
        public string FirstName                 { get; set; }
        public bool IsSelected                  { get; set; }
        public SecondElementListe SecondList    { get; set; }

        public FirstElement()
        {
            FirstName   = "";
            IsSelected  = false;
            SecondList = new SecondElementListe();
        }
        public FirstElement(string Name, bool selected, SecondElementListe liste)
        {
            FirstName   = Name;
            IsSelected  = selected;
            SecondList  = liste;
        }        
    }

    class FirstElementListe
    {
        public List<FirstElement> FirstListe { get; set; }

        public FirstElementListe()
        {
            FirstListe = new List<FirstElement>();
        }

        public void AddElement(FirstElement FE)
        {
            this.FirstListe.Add(FE);
        }

        public List<FirstElement> GetCompletFirstList()
        {
            return this.FirstListe;
        }

    }

Ich erstelle die folgenden Objekte:



FirstElementListe CompleteList = new FirstElementListe();

private void BuildList()
        {
        
            SecondElementListe SL1 = new SecondElementListe();

            SecondElement a1 = new SecondElement("S1", false);
            SecondElement b1 = new SecondElement("S2", true);
            SecondElement c1 = new SecondElement("S3", false);
            SecondElement d1 = new SecondElement("S4", true);

            SL1.AddElement(a1);
            SL1.AddElement(b1);
            SL1.AddElement(c1);
            SL1.AddElement(d1);

            FirstElement FE1 = new FirstElement("Element A", true, SL1);
            CompleteList.AddElement(FE1);

            //  -----------------------------------------------------------

            SecondElementListe SL2 = new SecondElementListe();

            SecondElement a2 = new SecondElement("S1", true);
            SecondElement b2 = new SecondElement("S2", false);
            SecondElement c2 = new SecondElement("S3", true);
            SecondElement d2 = new SecondElement("S4", false);

            SL2.AddElement(a2);
            SL2.AddElement(b2);
            SL2.AddElement(c2);
            SL2.AddElement(d2);

            FirstElement FE2 = new FirstElement("Element B", false, SL2);
            
            CompleteList.AddElement(FE2);
        }

So wie bekomme ich es jetzt hin das ich in einem DataTemplate beide Listen angezeigt bekomme: Also in einer Listbox:


    <ListBox Grid.Column="1" Grid.Row="1" ItemTemplate="{StaticResource testTemplate}" x:Name="LB_Element"></ListBox>

und das DataTemplate dazu:


        <DataTemplate x:Key="testTemplate" x:Name="testTemplate" >
            <Border Grid.Column="0" x:Name="border" CornerRadius="2"  HorizontalAlignment="Left" VerticalAlignment="Center" >
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="40"/>
                    </Grid.RowDefinitions>

                    <Grid Grid.Row="0" Margin="2,2,2,0">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto"/>
                            <ColumnDefinition Width="Auto"/>
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="Auto"/>
                        </Grid.ColumnDefinitions>
                        <Label      Grid.Column="0" Margin="5,0,0,0"    Content="Name:"/>
                        <Label      Grid.Column="1" Margin="0,0,10,0"   Content="{Binding FirstName}"  x:Name="L_FirstElemente"/>
                        <CheckBox   Grid.Column="3" Margin="20,0,5,0"   Content="Ausgewählt"           IsChecked="{Binding IsSelected}"/>
                    </Grid>
AB HIER SECONLIST
                    <Grid Grid.Row="1" HorizontalAlignment="Center" Background="White" Width="300">
                        <ListBox ItemsSource="{Binding SecondList }" DisplayMemberPath="FirstName"  Margin="3" Background="LightGray"/>
                    </Grid>
Bis HIER

                </Grid>
            </Border>
        </DataTemplate>

Zwischen den beiden roten Markierungen will ich jetzt alle SeconElemente (CheckListBox) eines FirstElements angezeigt bekommen. Wie binde ich die zweite Liste an die erste ? Ich bekomme es nicht hin (Gibt es Evt. ein Template in einem Template ?)

Ich binde aktuell so:


            this.LB_Element.ItemsSource = CompleteList.GetCompletFirstList();

Kann mir jemand helfen ? (Ich möchte es erstmal ohne MVVM hinbekommen)

Danke im voraus

23.01.2015 - 13:43 Uhr

Hi Mec (oder wer auch immer antworten will 😁 )
Hätte da nochmal eine Frage

wenn ich das ganze jetzt Abbilden will in Anwedung auf eine DataTabel und noch eine weiter Spalte hinzufüge und das endergebnis soll so aussehen:

ID | SpA | SpB | Zugriff

6 | I | B | 01.01.2000 <--> Block B - kleinstes Datum von B (B kommt vor C) (I ist Aber vor K

2 | I | B | 01.01.2001 <--> Block B
3 | I | B | 01.01.2002 <--> Block B - größtes Datum B
4 | I | C | 01.01.2000 <--> Block C - 2. Block C kommt aber nach B beginnend mit kleinstem Datum
7 | I | C | 01.01.2001 <--> Block C
5 | I | A | 01.01.2003 <--> Block A - kleinstes Datum von A (liegt aber hinter kleinstem Datum von B und C
1 | I | A | 01.01.2004 <--> Block A
6 | K | B | 01.01.2001 <--> Block B - kleinstes Datum von B (B kommt vor C) (Aber ab hier mit K in SPA

2 | K | B | 01.01.2002 <--> Block B
3 | K | B | 01.01.2003 <--> Block B - größtes Datum B
4 | K | C | 01.01.2001 <--> Block C - 2. Block C kommt aber nach B beginnend mit kleinstem Datum
7 | K | C | 01.01.2002 <--> Block C
5 | K | A | 01.01.2004 <--> Block A - kleinstes Datum von A (liegt aber hinter kleinstem Datum von B und C
1 | K | A | 01.01.2005 <--> Block A

Zuerst Nach SPA und kleinstes Datum
Dann nach SPB und kleinstes Datum

Habe ein kleines Beispiel gefunden (und das stimmt nicht ganz):

| ItemName | ItemNo | ItemValue A 2 3,1 B 1 2,2 C 3 1,5 A 2 2,0 B 1 1,4 A 2 2,7 C 3 1,3 C 3 2,1 B 1 1,9 :::{style="color: blue;"} ```csharp table = table.AsEnumerable() .GroupBy(r => r.Field("ItemName")) .OrderBy(g => g.Max(r => r.Field("ItemNo"))) .SelectMany(g => g.OrderBy(r => r.Field("ItemValue"))) .CopyToDataTable(); ```
Wie sieht das Sortieren denn dann bei mir aus (mit 3 Spalten) bekomme es nicht hin....... NOOOOO 🤔
23.01.2015 - 08:20 Uhr

TOP, echt Top 'mec'. Es funktioniert 😉

Was Farben so alles ausmachen können 😁

Fettes Merci

23.01.2015 - 07:33 Uhr
  1. Die Überschrift sagt das ich nach Datum (eigentlich 2 mal) sotieren möchte.

  2. Wo habe ich expliziet gesagt das ich nach nur SpA sotieren will ? 🤔 Find ich nicht.

  3. Wo fehlt da die Logik ?

ID | SpA | Zugriff

6 | B | 01.01.2000 <--> Block B - kleinstes Datum von B (B kommt vor C)
2 | B | 01.01.2001 <--> Block B
3 | B | 01.01.2002 <--> Block B - größtes Datum B

4 | C | 01.01.2000 <--> Block C - 2. Block C kommt aber nach B beginnend mit kleinstem Datum
7 | C | 01.01.2001 <--> Block C

5 | A | 01.01.2003 <--> Block A - kleinstes Datum von A (liegt aber hinter kleinstem Datum von B und C
1 | A | 01.01.2004 <--> Block A[/font]

Es gibt kein verschiedene Inhalte in SpA diese sortieren und DANN nach Zugriff sortieren
und dann ALLE "Blöcke" nach Datum sortieren.

Könnte sein, dass irgendeine Kultur so sortiert; mir ist aber keine Bekannt.

  • Keine Ahnung was solche Sprüche immer sollen?

Wenn Du nach SpA sortierst sieht es anders aus, wenn Du nur nach Datum sortierst wird es anders aussehen und wenn du es kombinierst ebenfalls.

Deswegen frage ich nach 😉 Und wollte wissen ob etwas bekannt ist....

23.01.2015 - 07:04 Uhr

Nein das wäre KEINE Sortierung nach SpA und dann Datum dann würde es ja nicht mit B beginnen sondern mit A

FALSCH:
wenn ich erst nach SpA sortieren würde und dann Datum würde es so aussehen

ID | SpA | Zugriff

5 | A | 01.01.2003 (<--- NICHT DAS KLEINSTE DATUM über alle Datensätze

1 | A | 01.01.2004
6 | B | 01.01.2000
2 | B | 01.01.2001
3 | B | 01.01.2002
4 | C | 01.01.2000
7 | C | 01.01.2001
...

AUCH FALSCH:
Sortierung nur nach SpA

ID | SpA | Zugriff

1 | A | 01.01.2004
5 | A | 01.01.2003
2 | B | 01.01.2001
3 | B | 01.01.2002
6 | B | 01.01.2000
4 | C | 01.01.2000
7 | C | 01.01.2001
...

Originaltabelle

ID | SpA | Zugriff

1 | A | 01.01.2004
2 | B | 01.01.2001
3 | B | 01.01.2002
4 | C | 01.01.2000
5 | A | 01.01.2003
6 | B | 01.01.2000
7 | C | 01.01.2001
...

DAS WÄRE richtig !!! ID | SpA | Zugriff

6 | B | 01.01.2000 <--> Block B - kleinstes Datum Von B (B kommt vor A
2 | B | 01.01.2001 <--> Block B
3 | B | 01.01.2002 <--> Block B - größtes Datum B

4 | C | 01.01.2000 <--> Block C - 2. Block C kommt aber nach B beginnend mit kleinstem Datum
7 | C | 01.01.2001 <--> Block C

5 | A | 01.01.2003 <--> Block A - kleinstes Datum von A (liegt aber hinter kleinstem Datum von B und C
1 | A | 01.01.2004 <--> Block A

...

Hat jemand einen Tip ?

22.01.2015 - 23:11 Uhr

-> Access oder DataSet

Nabend,

ich finde leider nichts passendes im Netz oder ich Suche falsch. Ich habe folgendes Problem

Ich habe eine Datenbank mit 3 Spalten ID | SpA | Zugriff

1 | A | 01.01.2004
2 | B | 01.01.2001
3 | B | 01.01.2002
4 | C | 01.01.2000
5 | A | 01.01.2003
6 | B | 01.01.2000
7 | C | 01.01.2001
...

So und ich möchte die Reihe jetzt sortieren nach folgendem Schema:

Zugriff [Datum], SPA[Text] und nochmal Zugriff --> ID | SpA | Zugriff

6 | B | 01.01.2000
2 | B | 01.01.2001
3 | B | 01.01.2002
4 | C | 01.01.2000 <- Ab hier C und wieder kleinestes Datum (kleiner als ID 2)
7 | C | 01.01.2001
5 | A | 01.01.2003 <- Ab hier A und wieder starten mit dem kleinsten Datum
1 | A | 01.01.2004
...

Nur nach Datum reicht nicht. Also müsste erst nach Datum und dann nach Datum und SpA sotiert werden. Gibt es da eine Möglichkeit ? Ich finde keiner "ORDER BY" - Klausel oder muss ich das mittel Code lösen ?

Merci

15.01.2015 - 12:56 Uhr

Hi

ich versuche mich kurz zu halten.

Ich habe eine Checklistbox (ItemsSource ist verbunden mit der unteren Klasse):


                                                    <ListBox x:Name="lb_TableVariants" Margin="2,2,2,2" Height="26"  Width="200" Background="Transparent">
                                                        <ListBox.ItemTemplate>
                                                            <HierarchicalDataTemplate>
                                                                <CheckBox  Content="{Binding Path=ElementName}" IsChecked="{Binding Path=IsChecked}" Checked="CLB_AnsichtChanged" Unchecked="CLB_AnsichtChanged"/>
                                                            </HierarchicalDataTemplate>
                                                        </ListBox.ItemTemplate>
                                                    </ListBox>

An diese ist einfach (ItemsSource) diese Klassen gebunden (Elemente werden angezeigt):


    class Ansichtelement
    {
        public string ElementName { get; set; }
        public bool IsChecked { get; set; }

        public Ansichtelement(string Name, bool Checked)
        {
            ElementName     = Name;
            IsChecked       = Checked;
        }
    }

    class Ansichtsliste
    {
        public List<Ansichtelement> AlleElemente { get; set; }

        public Ansichtsliste()
        {
            AlleElemente = new List<Ansichtelement>();
        }

        public void AddElement(Ansichtelement Element)
        {
            AlleElemente.Add(Element);
        }

        public List<Ansichtelement> GetAllElemente()
        {
            return AlleElemente;
        }
    }

so dann habe ich eine ListBox in dem Elemente behinhaltet sind die in einem DataTemplate aufgebaut werden.

Hier habe ich ein "Border"

diesen würde ich gerene Ein und ausblenden je nachdem ich ein Element in der Checklistbox angeklickt habe mit Hilfe von Datatrigger.

Wie bekomme ich das hin?

Habe folgendes schon versucht: Binden der Checklistbox an daen Border:


                        <Border Grid.Column="0" x:Name="border" CornerRadius="2"  Background="LightGray"  HorizontalAlignment="Left" VerticalAlignment="Center" BorderBrush="SlateGray" BorderThickness="1" Margin="3,1,0,1" >
                            <Border.Style>
                                <Style  TargetType="{x:Type Border}">
                                    <Style.Triggers>
                                        <DataTrigger Binding ="{Binding ElementName=CLB_TableVar}">
                                            <Setter Property="Visibility" Value="Visible" />
                                        </DataTrigger>
                                        <MultiDataTrigger>
                                            <MultiDataTrigger.Conditions>
                                                <Condition Binding="{Binding ElementName=CLB_TableVar, Path=SelectedItem, Mode=OneWay}" Value="ID" />
                                                <Condition Binding="{Binding ElementName=CLB_TableVar, Path=IsChecked, Mode=OneWay}" Value="-1" />
                                            </MultiDataTrigger.Conditions>
                                            <Setter Property="Visibility" Value="Collapsed" />
                                        </MultiDataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </Border.Style>

oder auch an die Klasse Ansichtsliste (Behindalt z.B: "ID")


                            <Border.Style>
                                <Style  TargetType="{x:Type Border}">
                                    <Style.Triggers>
                                        <DataTrigger Binding ="{Binding ElementName=AnsichtsListe}">
                                            <Setter Property="Visibility" Value="Visible" />
                                        </DataTrigger>
                                        <MultiDataTrigger>
                                            <MultiDataTrigger.Conditions>
                                                <Condition Binding="{Binding ElementName=AnsichtsListe, Path=ElementName, Mode=OneWay}" Value="ID" />
                                                <Condition Binding="{Binding ElementName=AnsichtsListe, Path=IsChecked, Mode=OneWay}" Value="-1" />
                                            </MultiDataTrigger.Conditions>
                                            <Setter Property="Visibility" Value="Collapsed" />
                                        </MultiDataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </Border.Style>

keine auswirkung.

Wenn ich es direkt an eine Checkbox hänge funktioniert es.... Wo ist mein Fehler ?

Danke für die Hilfe-(stellung)

21.11.2014 - 12:16 Uhr

Leute ich habe nichts gegen MVVM.... Sagte ich nie....

Ich sagte das ich Zeichnen unter WPF verstehen will.... Mehr nicht....

Zu MVVM: Klar macht das Sinn und klar sollte man es einsetzen es ändert aber nicht an der Sache das ich verstehen möchte wie man zeichnet in WPF.....

Bevor ich ein Auto bauen kann muss ich ja auch wissen wie ein Rad funktioniert oder nicht ?

Versteht mich nicht falsch (und ich bin nicht böse oder ähnliches, und ich bin dankbar für den Link und ich werde ihn auch durcharbeiten)

Wenn jemand 2 string verketten will fängt man auch nicht gleich mit regual Regex an, oder ?

Also nochmal ich bin euch nicht böse, ich will euch nichts böses. Ich wollte nur ein Erklärung bzw. denkanstöße....

bzgl. MVVM, hat da jemand ein GUTES "Verständliches" Tutorial ? 😁 👍

21.11.2014 - 08:49 Uhr

Moin,
Sorry, das Thema geht gerade in eine falsche Richtung...

Das ändert aber nichts an der Sache das ich das Zeichnen ansich gerne unter WPF verstehen möchte und das hat ja nicht mit MVVM zu tun...

Mein frage hat sich ja ++nicht ++ auf MVVM bezogen sondern auf das Zeichnen. Ob ich es dann mittels eines Patterns umsetze ist ja eine andere Sache...

Sorry aber Ich zweifel auch schwer daran das WPF mit Fokus auf MVVM entwickelt wurde... MVVM ist wohl eher eine Technik / Pattern (SPRICH: SOLLTEST DU BRAUCHST DU ABER NICHT) und genau aus diesem Grund und wegen eines Verständniss-Problems frage ich nach dem Zeichnen. Und soweit ich weiss ist MVVM eine Technik zur einfacheren Verwaltung des Codes (Übersichtlichkeit) und hat jetzt nicht allzuviel mit Performance zu tun.... (wäre mir neu und lass mich gerne belehren)

Und die Umsetzung bzgl. Windows Forms und WPF bezieht sich bei mir auf das Erstellen der Klassen/Objekte etc. und nicht auf die Anzeige ansich... (war vielleicht falsch ausgedrückt, sorry)

Aber meine Frage bleibt.... Zeichnen Code behind.

21.11.2014 - 07:32 Uhr

Merci MrSparkle,

ich habe mir den Artikel mal angeschaut (kurz drübergeflogen). Sieht ganz gut aus.

Aber da ist halt nur eine Sache, ich wollte eigentlich (ja und ich weiss es ist ein Fehler) erstmal das alles ohne MVVM machen. Ich habe meine eigene implementierung vom Windows Forms.

Ich würde gerne erstmal das einfache Zeichnen verstehen wollen unter WPF. Gibt es kein Snippets ? Ich finde leider nichts. Also ich würde gerne verstehen wie man was macht. Also bitte nicht falsch verstehen. Der Artikel ist gut aber geht mir einen Schritt zu weit....

20.11.2014 - 10:07 Uhr

Guten morgen,

ich bin vor kurzem von Windows Forms umgestiegen auf WPF (naja ich versuche mich jetzt mal einwenig in WPF)

Ich habe folgende Frage. Unter Windows Forms war es eigentlich relativ einfach einfach Dinge zu Zeichen (Rechtecke, Kurven, Linien, Bezierkurven, GraphicPath, etc.... mit System.Drawing.Graphics)

So und jetzt habe ich hier einen schönen Welzer liegen mit Knapp 1400 Seiten in den es nur um WPF geht. Da steht zwar schön wie man zeichnet, allerdings erschließt sich mir die Sache nicht ganz (und ehrlich gesagt finde ich es etwas seltsam.... Naja vielleicht liegt es ja nur an mir) Gute beispiele findet man aber seltsamerweise auch nicht.

Jetzt aber endlich zu meiner Frage oder besser Fragen.

Wenn ich ein Zeichenprogramm für Klassendiagramme erstellen will (nur als Beispiel, WICHTIG als Verbindung keine geraden Linien sondern Bezierkurven und Rechtecke mit Textinhalt) wie mache ich das dann ? Zeichne ich auf ein Canvas.
Bei GDI war es doch so das ich alles verwenden konnte (Rechtecke, Kurven und der rest, einfach zeichnen lassen so wie man es wollte).
Bei WPF kann ich entweder nur Rechtecke zeichen (wenn ich es richtig verstanden habe sind das dann Vectorzeichnungen) oder Bezierkurven, aber nicht beiders "gleichzeitig" (Keine Vektorzeichnungen).
ACHTUNG: SO HABE ICH ES BIS JETZT VERSTANDEN!!! Es kann auch komplett falsch sein!!!

Also Beispiel:

Früher: Graphgics g = new.....
g.DrawRectangle(Pen, Start_x, Start_y, width, hight); <--- Wurde mir dort plaziert....
Das gleiche mit Text, Graphicpath, ect....

EINFACH UND SCHNELL....

Wie geht das denn bei WPF ???
Sehe ich es richtig das ich ein Rechteck zeichne und das dann "verschiebe" ???
Bissel seltsam.... vorallem weil es bei Linien nicht so passiert...

Aach ja da fällt mir gerade ein: Ich rede hier von Codebehind und nicht im XAML!!!!

Wie ich schon sagte als Beispiel nehme ich einfach ein Klassendiagramm mit geschwungenen (Bezierkurven) Verbindunglinien....

Hat jemand ein gutes Beispiel? bzw. wann verwend ich wie was?

Wo ist der Unterschied zwischen: Shapes, Drawing und DrawingContext und wann nehme ich was?

Ich weiss das hier liest sich nicht so einfach. Aber vielleicht versteht mich ja jemand 🤔 Wäre echt Top für kleine Denkanstöße 👍

Schönen Tag erstaml und ein fettes merci....

21.09.2014 - 18:40 Uhr

N'abend

Ich hoffe mir kann jemand helfen. Folgendes:

Ich habe eine Klasse: Team
Ich habe eine Klasse: Teamlist <- Liste aus Teams (wer hätte das gedacht 😉 )

Ein Team hat eine Objekte der Klasse: Kundenliste
Kundeliste ist eine Klasse mit Liste aus Kunden.

alles Implementiert unter Windows Form. Ich will jetzt das ganze in WPF umsetzen. Stoße jedoch an meine bescheidenen Fähigkeiten. Die Daten kommen aus einer Datenbank, Methoden zum suchen/filtern sind implemntiert.

Jetzt ist es aber so das ja in WPF auf ObservableCollection gesetzt wird.

Ich habe eine Oberfläche mit einer Combobox und 2 Listboxen. In der Mitte befindet sich ein Buttont. (Hat jeder schonmal gesehen). In der linken Listbox sollen nun alle vorhanden Kunden angezeigt werden. In der rechten Listbox alle Kunden die einem Team zugeordnet sind....

Wenn ich jetzt ein Team in der Combobox auswähle sollen alle Kunden des Teams in der rechten Listbox angezeigt werden. Wenn ich einen Kunden in der linken Listbox auswähle soll der Kunde nach rechts wandern und dem Team zugeordnet werden und in der Datenbank gespeichert werden.

  1. muss ich jetzt auf ObservableCollection von Liste umsteigen? Alles neu implementieren? Wenn ja macht es einen unterschied ob ich alles in einer Liste oder ObservableCollection umsetze? Ist eine ObservableCollection eine "bessere" Liste? Wenn ja macht ja eine Liste (Daseinberechtigung unter WPF) keinen Sinn mehr...

  2. Wie implentiert man das mittels MVVM? Ich finde x-Beispiele mit Anbindung mittels DataContext, Finde das aber irgendwie seltsam.

  3. Es gibt x solcher Klassen und Fenster.... muss ich dann wirklich alles auf ObservableCollection umstellen oder gibt es eine besser Möglichkeit?

Viele Fragen für einen WPF-Neuling ich weiss. Ich hoffe ich habe mich bestmöglich ausgedrückt.... und Danke vorab...

Nachtrag:

Bisher habe ich es so umgesetzt (Windows Forms) dass wenn ich auf einen Speichern Button (den es natürlich auch im WPF gibt) klicke, eine Klasse DataSource aufrufe und dort das Speichern ausgeführt wird.... Mache ich das dann in der ObservableCollection ????