Laden...

Forenbeiträge von CoPyMaus Ingesamt 12 Beiträge

23.02.2022 - 18:03 Uhr

Alles klar, werde mich dann mal in beiden einarbeiten, um die Unterschiede zu differenzieren.

Vielen Dank und noch ein schönen Abend.
CoPyMaus


Thema kann und darf geschlossen werden.

23.02.2022 - 17:41 Uhr

Hallo Abt,

danke für dein Antwort. Jedenfalls macht mich dieses schon mal ein bisschen schlauer. Auf Webview2 bin ich auch schon gestoßen. Werde mal versuchen, mich weiter in diese Materie ein zu arbeiten. Wäre CefSharp auch eine Möglichkeit? Habe den Eindruck, das CefSharp ein wenig umfangreicher wäre. (Mein Eindruck).

23.02.2022 - 17:26 Uhr

Hallo an alle,

ist es möglich, den Quellcode einer Internetseite aus einem externen Browser wie Chrome / IE / Edge / Firefox und Co, mit C# auszulesen? Und wenn ja, kann man mir vielleicht einen Ansatz bereit stellen, auf dem ich aufbauen kann?

Ich möchte den Chat einer Internetseite parsen, der mit AJAX/jQuery oder Prototype aktualisiert wird. Dabei möchte ich die einzelnen DOM Elemente auslesen. Jetzt recherchiere ich schon seit 3 Tagen, nach entsprechenden Möglichkeiten und habe einfach keinen vernünftigen Ansatz gefunden, außer das die DevTools von Chrome oder IE angeblich eine API bereit stellt. Aber auch da bin ich nicht weiter fündig geworden.

Danke schon mal im voraus.

CoPyMaus

07.11.2021 - 23:11 Uhr

Nochmal Entschuldigung für Doppelpostings. Ich weiß, das es in vielen Forum nicht gerne gesehen ist und eigentlich auch gegen Regeln verstößt. Leider kann ich nicht editieren.

Aber Schlussendlich: Dieser Thread hat sich erledigt.

Manchmal sieht man den Wald vor lauter Bäumen nicht. Grund für das oben beschriebene Problem war meine Faulheit. Ich habe in meinem DataViewModel (Das ViewModel mit den Getter, Setter und PropertyChanged) einen, nein, drei Fehler gehabt.

Das kommt, wenn man ViewModels mit mehr als 30 Variablen erstellen muss und man einfach Copy + Paste macht. Aber beim austauschen der Keys das eine oder andere übersieht. So hat der Setter von "user_ip_type" noch "user_id = value" drin gehabt, was zur Folge hatte, das "ich" die Übergabe der falschen Werte, selber erzeugt habe.

Kann man da von Anfängerfehler sprechen? Ich glaube, das passiert sogar erfahrenen Entwicklern.

Dennoch danke und vielleicht das nächste mal, mit einem Problem, welches ich wirklich nicht gelöst bekomme.

CoPyMaus

07.11.2021 - 22:03 Uhr

Hallo Palladin007 und danke für deine Antwort.

Ich gebe zu, das ich noch nicht wirklich lange mit C# zu tun habe. (Aktuell erst ein Jahr) und ich in dieser Zeit unglaublich viel, insbesondere MVVM bereits dazu gelernt habe.

Das die Dateien UserControl heißen, ist nur für mich, damit ich es besser auseinander halten kann.

Ansonsten ist es so, dass das ViewModel tatsächlich nichts von der View weiß, die View sich aber die Daten per Binding aus dem ViewModel holt.

Beim Programmstart werden die ViewModels initialisiert. Die holen dann die Daten aus den jeweiligen ConstructObject- Dateien. Das Prinzip ist folgenderma0en aufgebaut:

Model und Repository. Das Repository bindet sich an das Model, um die Daten zur Verfügung zu stellen. Dabei kommt es bei einigen wenigen, zu einer Datenbankabfrage. Aber auch nur dann, wenn das Repository die Daten aufarbeitet.

ConstructObject ist lediglich nur eine Schnittstelle, welche das Repository in das jeweilige DataViewModel konvertieren soll. (DataViewModel = Getter und Setter mit PropertyChanged- Ereignis) Anschließend wird die Collection an das Binding-Collection des aufrufenden ViewModels weiter gegeben, woraus sich das View dann bedient. (DataGrid- Binding)

Also eine ständig offene Verbindung zur Datenbank besteht nicht. Lediglich mit einem Command (Button), wird die SelectedUser (DataGrid) an eine weitere Klasse gegeben, welche die Daten dann in der Datenbank wieder ablegt. Ist dieses erledigt, wird die Bindung zur Datenbank wieder gelöst.

07.11.2021 - 20:32 Uhr

Hmm, scheinbar kann man hier Beiträge nicht bearbeiten, oder zumindest ich kann es nicht. Daher sorry für's Doppelpost,

Nachdem ich nun verschiedene Durchläufe gemacht habe, ist mir folgendes aufgefallen:

  • Es betrifft tatsächlich nur INT und nicht String. String wird 1:1 übergeben.
  • Es gibt kein Schema, das Problem tritt ganz sporadisch auf. (Confused) Sprich, Ein Datensatz der vorher richtig war, kann beim nächsten mal falsch sein.

Ich habe das ganze nun abgeändert. Obwohl es wohl nicht die feine Art sein soll, verzichte ich in diesem Fall auf Model und Repository und befülle ein ObservableCollection direkt mit den Einträgen aus der Datenbank. Im Anschluss prüfe ich die INT-Member und überschreibe diese gegebenenfalls neu, damit die Daten wieder richtig sind.
Erst dann übergebe ich die Collection an das ViewModel, welches die Daten benötigt.

Not macht eben doch erfinderisch.

Falls ihr dennoch andere Lösungsansätze habt, schreibt es mir gerne. Schließlich lernt man ständig dazu.

Vielen Dank nochmal,
CoPyMaus

07.11.2021 - 18:14 Uhr

Hallo zusammen,

ich habe da ein kleines Problem und weiß nicht, wo das Problem sein könnte. Kurzum, hier mein Problem:

Ich lese eine Nutzerdatenbank aus, setze die Werte und gebe diese an die entsprechende ObservableCollection.


    class ConstructObjects_UserControl_ListView
    {
        public static ObservableCollection<UserControl_UserListViewModel> Read
        {
            get
            {
                Repositories.UserControl_UserListRepository repository = new Repositories.UserControl_UserListRepository();
                var userlist = repository.GetUserList();
                var userListViewModel = userlist.Select(m => new UserControl_UserListViewModel()
                {
                    User_id = m.User_id,
                    User_name = m.User_name,
                    ............. // gekürzt
                    User_ip_type = m.User_ip_type,
                    ............. // gekürzt
                });
                ObservableCollection<UserControl_UserListViewModel> UCULVM = new ObservableCollection<UserControl_UserListViewModel>(userListViewModel);
                //return (new ObservableCollection<UserControl_UserListViewModel>(userListViewModel));
            }
        }
    }

Die return zeile ist erst mal ausdokumentiert, da es mir darum ging, zu ermitteln, wo der Fehler passiert. Die vorletzte Zeile gehört eigentlich nicht rein, ist nur zwecks Debug (Auswertung).

Auf die vorletzte Zeile will ich jetzt genauer eingehen:
userListViewModel enthält genau die Werte, welche aus der Datenbank ausgelesen wurden:

User_id 2
User_ip_type 6

Nach der Übergabe an die ObservableCollection (UCULVM) sind die Werte jedoch:

User_id 6
User_ip_type 4

Die Datenbank hat derzeit 718 Einträge. Die meisten sind auch richtig, aber interessanterweise sind die Werte bei insgesamt 32 Einträgen falsch. User_id und User_ip_type erhalten immer die Werte 6 und 4.

Woran kann das liegen?

Im Anhang noch zwei Screenshoots, welche das Problem aufzeigen.

Danke schon mal im vorraus
CoPyMaus

08.05.2021 - 22:46 Uhr

@Abt

... am Ende wirst dann mehr Zeit in die MVVM Implementierung stecken als in die Funktionalität Deines Minitools.

Von einem Minitool mit ein paar kleinen Funktionen habe ich nicht gesprochen. Viel mehr geht es um eine ServerSoftware, die ShoutCast, IceCast und RSAS vewalten und steuern soll. Des Weiteren beinhaltet es ein User- & GroupManagement, Informationssystem und einem kleinen Chat. Eine zweite Software, die auf die Serversoft zugreift (Client), kann hingegen fast nichts, weil sämtliche Berechtigungen von der ServerSoft bereit gestellt werden. Das bedeutet, der Client wertet nur aus und bietet an. Die Kommandos selber, werden jedoch wieder über die Serversoftware ausgeführt. Natürlich ist die Übertragung zwischen Server und Client verschlüsselt. Außerdem syncronisiert sich die Software mit der Datenbank der Homepage. (Ebenfalls verschlüsselt - Sorry, bin mal Opfer von einer MITM- Attacke geworden. Das hat geprägt.)

Client = Minitool (Das lasse ich so stehen)
Der Server ist meines Erachtens nicht mehr so mini. Da steckt schon einiges hinter. Aber naja, andere mögen es noch als Mini bezeichnen.

@Abt und @Palladin007
Ich möchte euch gegenüber meine Danksagung aussprechen. Ich bin offen für Kritik. Aber auch die Anregungen, die ihr mir mit auf dem Weg gegeben habt, bleiben nicht ungeachtet. Ich werde mein Projekt erst mal für ein paar Tage ruhen lassen, mich in die Materie der von euch vorgeschlagenen Libs einlesen und experimentieren. Im Anschluss werde ich ggfl. mein Projekt noch mal umbauen.

Danke
CoPyMaus

08.05.2021 - 21:07 Uhr

Hallo Palladin007,

vielen Dank für deinen Beitrag. Ich komme leider erst jetzt dazu, mich der Sache weiter zu widmen und werde natürlich deine Lösungsansätze ausprobieren.

OnContentRendered & StackPanel_MouseDown:
Für Beides gibt es meines Wissens nach keine direkte Lösung mittels Commands, das Prinzip funktioniert aber trotzdem, ...
... Besser wäre natürlich, Du verzichtest ganz auf CodeBehind, in den allermeisten Fällen geht das und Du kommst nicht auf die idee, irgendwelche Logik hineinzuschreiben.

Das ist einer meiner Ziele: Komplett ohne Code-Behind auszukommen. Nur habe ich bisher noch keine Lösungen gefunden. Dafür jedoch, das ich ein Passwortfeld tausche, gegen ein Textfeld, bei jedem Tastendruck, das eingegebene Zeichen abfange, dieses Zeichen zusammen mit bereits vorhandenen Zeichen, in ein anderen String lege und dem Field einfach nur die Anzahl Dots zurück schicke, die bereits in Password.Length vorzufinden sind. War ne nette Idee, die ich hatte und funktioniert super.

Bei beiden Methoden frage ich mich aber auch: wozu?
Das Bewegen eines Fensters verbieten ... ich hasse es!

Ja eben nicht verbieten. StackPanel_MouseDown ermöglicht es wieder, nach einem WindowStyle="None", das Window wieder verschieben zu können. Wichtig ist mir dabei auch, das ich die Positionsdaten (Ecke oben links) des Window beim schließen des Programms habe, um diese in den AppSettings zu speichern. (Wiederherstellung beim Start) Das habe ich alles mit ViewModel ohne Probleme bereits lösen können.

Not-invented-here-Syndrom:
Von mir ein kleiner Erfahrungsbericht, was...

Ok, wenn man auf seiner Arbeit so einen Chef hat, braucht man keine Feinde mehr. Zumindest in Sachen Entwicklung nicht. Ich würde damit vermutlich auch nicht glücklich werden.
Ich verstehe die Situation, das man nicht ganz ohne zusätzliche Libs auskommt. Ich verwende ja auch schon das Newtonsoft.Json, weil es meines Erachtens, besser mit PHP kompatibel ist. Ja, das Programm synchronisiert Daten mit der HP ab. Auch was Styles anbelangt, musste ich bereits auf das PresentationFramwork.Aero zurück greifen, da ich sonst meine ComboBoxen nicht so hinbekommen hätte, wie ich es wollte.

Was ich damit sagen möchte: Wenn es wirklich nicht anders geht, greife ich selbstverständlich auf externe Libs zurück. Nur will ich vermeiden, das Libs für vielleicht eine oder zwei Methodenaufrufe eingebunden werden, die man hätte elegant auch so lösen können. (Ausnahmen bestätigen die Regel).

Was haltet ihr den von MVVM-Light? Ist es wirklich so Sinnbringend, das man besser nicht darauf verzichten sollte? Oder ist es nur eine Erweiterung, das 0815 Noobs (wie ich noch einer bin) damit besser klar kommen?

CoPyMaus

07.05.2021 - 21:57 Uhr

Vielen Dank für deinen Beitrag.

Ich habe mal eben in die Links reingeschaut. Ich werde sie mir noch einmal genauer ansehen. Aber ich denke, das es mich zumindest in Sachen "Begriffe in C#" noch mal weiter bringen wird. Ich habe tatsächlich den Begriff Variable entdeckt und festgestellt, das es genau das gleiche ist, was ich aus PHP her kenne. Nur das diese in C# explizit mit Typen oder Objekte definiert / referenziert werden müssen. (War das jetzt so richtig?)

Not-invented-here-Syndrom

Lach, den Begriff kannte ich bis heute nicht. Ok, ich bekenne mich Schuldig. Aber es ist niemals zu spät, etwas zu ändern. (Wenn ich die Einsicht gewinne)

CoPyMaus

07.05.2021 - 21:16 Uhr

Ok, ich habe mir echt Mühe für mein ersten Thread hier gegeben. Aber ich bin eben auch nicht perfekt und entschuldige mich dafür, wenn das eine oder andere, Verwirrend erscheint.

Visual Studio ist nicht die GUI, sondern Deine IDE.
GUI ist in diesem Fall WPF.

Danke für den Hinweis. Eigentlich hätte ich es wissen müssen. Aber, ich haue "noch" einige Begriffe durcheinander. Durch C# habe ich erst mal Begriffe kennen gelernt, die es in der (Scripter- Welt [PHP]) nicht gibt. Ich kenne " public function blablahblah(bla) " oder einfach nur " function blahblah(blah) ", wo es egal ist, ob ich ein int, string oder object übergebe. PHP nimmt eben alles so wie es kommt, es sei denn, das man explizit eine Bestimmung der Variable vornimmt. Und da ist es wieder, das Wort Variable. In ganz C# habe ich diesen Begriff bisher nicht gesehen. Hier wird doch eher von Fields, Members, Properties und Methoden gesprochen. Was jetzt genau was ist, steige ich so allmählich durch.

Es ist für einen alten Scripter eben nicht einfach, sich einer neuen Sprache zu bemächtigen. Genauso, wenn man versucht, Chinesisch zu lernen. Aber wer nicht wagt, der auch nicht gewinnen kann.

Zu deinem eigentlichen Beitrag:
Ich habe "ehrlich" schon einiges im Web durchgekämmt. Darunter auch GitHub. Nur leider noch nichts gefunden, was mein Verständniss in dieser Thematik weiter bringt. Sicherlich werde ich weiterhin suchen und vielleicht finde ich die Lösung. Vielleicht bekomme ich aber auch den "AHA- Effekt" und mir fällt es wie Schuppen von den Augen. Alles ist möglich.

Ich möchte fünf bis sechs Tabs anlegen. Wie gesagt, mir ist es zunächst egal, ob ich die in der Xaml anlege, oder ob diese dynamisch erzeugt werden. Wobei letzteres wäre das Non-Plus-Ultra.

Hier war nicht vom Code-Behind die Rede sondern letzendlich eine Methode innderhalb der MainView bzw. einer weiteren Klasse. Sorry, für das Verständnissproblem.

Im Code-Behind habe ich derzeit lediglich zwei Methoden, weil ich dafür noch keine Alternativen gefunden habe.


        private void StackPanel_MouseDown(object sender, MouseButtonEventArgs e) // Window wieder bewegbar machen
        {
            if(e.ChangedButton == MouseButton.Left)
            {
                Application.Current.MainWindow.DragMove();
            }
        }
        bool _shown;
        protected override void OnContentRendered(EventArgs e) // Warten bis das Window vollständig aufgebaut ist. Danach weitere Hintergrundaktionen starten.
        {
            base.OnContentRendered(e);

            if(_shown)
                return;

            _shown = true;
        }

Ich mag es, wenn ich ein Programm starte, das ich sehen kann, was es gerade macht.

Gut meine Denkensweis mag vielleicht nicht ganz konform sein. Vielleicht ist des Rätsels Lösung tatsächlich in einer der Libs versteckt. Wenn es einfach nicht anders geht, werde ich auch darauf zurück greifen. Ja, ich mach mir das Leben schwerer, als es sein kann. Aber dafür weiß ich auch, was ich bisher in meinem Leben gemeistert habe, ohne (Querdenken an) eine Firma damit beauftragen zu müssen. (Querdenken aus [Firma = Libs])

Ich bin keiner, der erst um Hilfe schreit und dann den präsentierten Code, sein eigen nennt. Sicherlich schaue ich mir gerne etwas ab, probiere es aus und wenn es funktioniert: Voila - ein Schritt weiter, wieder mal Happy. Aber ich vergesse niemals, das ich mir mögliche Anregungen aus dem Netz "erschlichen" habe und werde diese Schnipsel auch niemals mein eigen nennen. Das was ich mir selber erarbeitet habe, ist meins. Das was ich bekommen habe, bleibt seins.

Gut, ich schreibe viel und für die meisten wohl eher zu viel. Ich bin eben der Meinung, je ausführlicher, umso besser kann geholfen werden. Leider lese ich oft genug Beiträge, wo sogar ich mich Frage: "Hää. was will der jetzt eigentlich". Will mich nicht ausschließen. Ist mir bestimmt auch schon passiert.

Lieben Gruß
CoPyMaus

07.05.2021 - 14:47 Uhr

Ein bischen viel Text. Aber ich hoffe dennoch, das man sich die Mühe macht, diesen Beitrag gründlich durch zu lesen und nicht nur überfliegt. (8956 Zeichen)

Hallo liebe Community,

das es mein erster Beitrag hier ist, will ich zunächst einmal etwas über mich bekannt geben.
Zunächst, ich bin bereits 48 Jahre und habe im Alter von 13 angefangen, das eine oder andere Geschnipsel herunter zu schreiben. Meine Zeit reicht zurück bis zum Commodore 64. Naja, das war wirklich nur Spielerei. Aber damit hat alles angefangen. Anstatt nur mit dem Computer zu spielen, interessierte es mich, wie so ein Ablauf von Programm eigentlich von statten geht. Die damaligen PEAK und POKE Befehle im Commodore Basic, habe ich im Laufe der Zeit zwar vergessen, aber dennoch hat es mir geholfen, mein Weg zu finden, so das ich seit dem selber in der Entwicklung kleiner Anwendungen befindlich bin. Mit der Geburt des Internet, hat sich jedoch mein Interessengebiet etwas verändert. Die ersten Seiten (Boah, waren die Grottenschlecht und sorgten für Augenkrebs) konnte ich recht schnell zusammen schustern. Naja, HTML ist ja nicht sonderlich schwer. Mit PHP und MySQL ging meine Entwicklung weiter. Später interessierte mich dann auch JavaScript, da durch Prototype und Ajax neue Möglichkeiten geschaffen wurden.

Jetzt heißt es wahrscheinlich wieder: "Ohje, schon wieder ein Scripter". Ja, ich gebe zu, das ich ein Scripter bin. Aber ohne diese Scripter, gäbe es diese Seite schließlich auch nicht.

Seit gut 6 Monaten jedoch, beschäftige ich mich mit C#. Ich entdeckte die Möglichkeiten, all das, was ich vorher bereits gemacht habe, mit einer App in C# verbinden zu können. Möglichkeiten, die für den einen oder anderen "User", Dinge zu vereinfachen. Alles in einem, ich bin begeistert. (Ok, etwas spät, das ich mir C# ansehe, aber: Selbst im meinem Alter, ist es nicht mehr so leicht, sich neues anzueignen. Aber ich versuche es.

Ich habe in den 6 Monaten, dank vieler User/Programmierer auf der großen weiten Welt, viel in Erfahrung bringen können. Die eine oder andere kleine App habe ich auch schon zustande bekommen. Ich gehe nach dem "Do-It-Yourself" System. Das bedeutet, was ich lese, probiere ich auch aus, um es selber zu sehen und mir einzuprägen. (Sofern es mich interessiert).
Ich bemühe ständig das WWW und kenne auch Suchfunktionen, die mir das eine oder andere zeigen, was ich benötige.

Aber dieses mal, habe ich ein Anliegen, wo ich einfach patu nicht weiter komme. Dazu gleich mehr.

Eines möchte ich dennoch los werden. Es sind nicht viele, die so etwas schreiben, aber ich finde, das die gebührende Anerkennung ein wesentlicher Bestandteil einer guten Community ist und ich mich daher, bei allen Bedanken möchte, die anderen weiter geholfen haben und jene, die auch weiterhin helfen werden. Dieses Danke geht an alle Portale, Blogs und was es noch so gibt, im weitem Internet. Ohne euch, stände mein C# nicht da, wo ich jetzt bin.

So, nun zu meinem Anliegen:
Wie bereits vorher erwähnt, beschäftige ich mich seit gut einem halben Jahr mit C#. Vieles habe ich gelernt, vieles haue ich auch durcheinander, weil es teilweise echt "to much" wird und ich dafür noch das Verständniss entwickeln muss. Die ersten Apps, waren doch recht linear geschrieben. Es waren kleine Apps. Daher nicht weiter Interessant.
Nun habe ich ein etwas größeres Projekt und ich merkte schnell, das es eine besondere Aufmerksam erfordert, damit man sich im eigenem Code noch auskennt. Dann, durch einen Zufall stieß ich auf das MVVM. Nachdem ich jetzt bereits mehrere Tage damit verbracht habe, die Vorgehensweise und den Aufbau einer MVVM verständlich und umsetzbar zu machen (natürlich nach benannten "Do-It-Yourself" Verfahren), kann ich mittlerweile behaupten, das ich es geschafft habe, ein eigenes Konzept mit MVVM umzusetzen. Die Trennung von MainView und ViewModel ist genau das, was die Übersichtlichkeit seines eigenen Codes, um ein vielfaches vereinfacht. Auch die Möglichkeit, später nur die View neu zu gestalten, um die App / das Programm auf andere Betriebssysteme portieren zu können, ist eine (finde ich) geniale Lösung, um nicht alles noch einmal schreiben zu müssen. (Im Augenmerk habe ich da derzeit Xamarin, aber erst später)

Doch gibt es etwas, was ich nicht verstehe, bzw. Sehe ich den Wald vor lauter Bäumen nicht!

Es geht um Multiple Views in einer View.
Ich schreibe derzeit eine App, die für meine RadioCommunity ist. Dabei geht es um ein automatisiertes ServerProgramm, das als Service/Programm mit dem Server gestartet werden soll.
Dabei soll das Programm natürlich alle relevanten Aktionen ausführen, die nach einem "ich sage mal" Stromausfall benötigt werden, um das Radio wieder in Gang zu bekommen. Demnach gibt es viele Einstellungsmöglichkeiten. Im Weiteren soll dieses ServerProgramm auch selber als Server fungieren. Eine zweite App, verbindet sich mit der ServerSoftware und bietet Nutzern jene Möglichkeiten, die im zur Verfügung gestellt werden.

Ich schreibe wieder zuviel. wahrscheinlich interessiert es nicht wirklich, was mein Vorhaben ist.

Multiple View in einer anderen View:
Mein Vorhaben basiert auf die Trennung der einzelnen Tabs in einem TabControl. Dabei soll jeder Tab seine eigene View erhalten (und jede View hat sein eigenes ViewModel). Dabei ist es mir egal, ob die Tabs bereits in der xaml angelegt sind, oder die Tabs dynamisch erzeugt werden. Ich habe sehr viel bereits im Netz darüber gelesen. Ja, die Beispiele funktionieren. Aber immer nur mit einer View. Sobald ich versuche eine zweite View hineinzubringen, werden entweder die ViewModels nicht erkannt, gestartet oder ich lande in irgendwelcher Exceptions, die ich nicht mehr zuordnen kann, weil diese im MainWindow (erste Zeile) rausgeworfen werden. Auch habe ich es schon geschafft, VS zum Absturz zu bringen, weil der Debugger sein zeitliches segnen wollte.

Also, was ich erreichen möchte:

MainWindow
eigene Instanz, soll nur wesentliche Steuerelemente wie Schließen, Minimieren, Maximieren und Wiederherstellen enthalten. <- Das habe ich bereits geschafft. Da ich mit WindowStyle="None" arbeite, musste ich die Steuerelemente entsprechend wieder herstellen. (Aus Designgründen)

Das MainWindow hat also schon mal sein eigenes ViewModel mit einer View, wo fast nichts drin ist. Lediglich die Grundfunktionen eines Window.
Darin möchte ich das MainContent mit samt ViewModel integrieren. Der MainContent enthält lediglich das Grundgerüst für View. Darin ist eigentlich nur ein TabControl enthalten.

Wie bereits erwähnt, bis hierhin habe ich es schon durch Anleitungen hin bekommen. Aber jetzt:

Ich möchte fünf bis sechs Tabs anlegen. Wie gesagt, mir ist es zunächst egal, ob ich die in der Xaml anlege, oder ob diese dynamisch erzeugt werden. Wobei letzteres wäre das Non-Plus-Ultra. Ein CodeBeispiel hat mir gezeigt, wie ich Tabs dynamisch anlege. Jedoch schaffe ich es einfach nicht, ein Binding zu einer View bzw. ViewModel mit zu übergeben.

In diesen Tabs soll jeweils eine eigene View (mit Binding auf das ViewModel) angezeigt werden. (Tab1 => View1, Tab2 => View2, Tab3 => View3..... usw)
Mein Gedanke geht sogar soweit, diese "SubViews" noch mal zu trennen und jeweils nur die einzelnen Elemente in einem Sichtbaren Bereich einzubinden (SubSubView). <- Und da hapert es bei mir. Ich bekomme es einfach nicht hin. Ich habe bereits soviel dazu gelesen, das ich selber nicht mehr weiß, was da richtig und falsch ist. Jeder macht es anders. Aber die Beispiele zeigen meist nur "eine" View in einer anderen.

Also noch mal Zusammengefasst:

MainWindow <-> MainContent (beinhaltet TabControl) <-> SubView auf jeden einzelnen Tab | (<-> SubSubView für die einzelnen Elemente bzw. Bereiche)

Da ich davon überzeugt bin, das gerade hier, viele erfahrene Entwickler zugegen sind (Habe schon einige interessante Artikel gelesen), dachte ich mir, das ich jetzt einfach mal Frage. Vielleicht hat der eine odere Andere einen Ansatz. Zu einem Projektbeispiel, das ich analysieren, auswerten und testen kann, um die Funktion zu verstehen, habe ich natürlich keine Einwände.

Ach noch was, bevor ich es vergesse, hier noch folgende Eckdaten / Informationen:

  • GUI = Visual Studio 2019 (up to date)
  • .Net Framework 4.8
  • WPF
  • ich möchte verhindern, zusätzliche Librarys zu verwenden. Im Netz kursieren viele Beispiele, die auf MVVMLight verweisen. (Oder war es MVMLight?) Es ist zwar nett, das mit solchen Librarys Dinge vereinfacht werden, aber ich möchte es doch gleich richtig machen. (Hört sich dumm an, aber so bin ich eben) Zumal ich rechne mit der Dummheit diverser Nutzer, die einfach Dateien löschen, im Glauben, das sie es eh nicht brauchen. (Ok, ist jedem selber überlassen, eine Software 100 mal und mehr zu installieren, wenn es nicht mehr funktioniert. Aber wenn man es vermeiden kann?)

So, genug geschwätzt. Ich bedanke mich schon mal bei jedem, der sich die Mühe macht, mir helfen zu wollen.
"Hochachtungsvoll"
CoPyMaus

P.S. Gerne nehme ich auch Angebote für privates BrainStorming entgegen. Jeder Teacher, der mir was begreiflich machen kann, ist mir willkommen. Einfach PN schreiben.