Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von MrSparkle
Thema: MultiDataTrigger-Binding - Null-Value-Exception
Am im Forum: GUI: WPF und XAML

Zitat von GeneVorph
Ich vermute es fehlt ein Nicht-Null-Wert – was auch immer das bedeuten mag.

Ein "Nicht-Null-Wert" ist ein Wert, der nicht null ist. Du kannst dem Template nicht null zuweisen, aber wo genau das auftritt, sollte dir die Fehlermeldung sagen.

Ansonsten scheint es in deinem Code noch mehrere andere Merkwürdigkeiten zu geben. Wo defininierst du z.B. das Template für "ExpanderHeaderCollapsedType", und warum gibst du als TargetNullValue für einen String-Wert ein "true" an?

Thema: Array in Methode auslagern
Am im Forum: Grundlagen von C#

Indem du in der Methode ein Array erstellst, dann mit Werten befüllst, und es zurückgibst:


private string[] CreateArray()
{
    string[] cryptKey = new string[33];
    // ....
    return cryptKey;
}

Und dann kannst du es als Parameter an eine andere Methode übergeben:


var cryptKey = CreateArray();
DoSomething(cryptKey);

Hier gibt es ein paar Links für den Einstieg: [FAQ] Wie finde ich den Einstieg in C#?

Thema: Welche Möglichkeiten habe ich einen Kalender im "Outlook"-Style zu designen?
Am im Forum: GUI: WPF und XAML

Für die Benutzeroberfläche würde ich ein Grid mit SharedSizeGroup in einem ItemsTemplate verwenden. Als Datenmodell hat du eine Auflistung von Wochen verwenden, die eine Auflistung von (jeweils 7) Tagen haben. Die Anzahl der Wochen sollte dabei allerdings nicht statisch sein, weil ein Februar auch hin und wieder mal nur 4 Wochen haben wird.

Diese Listen kannst du dann an das ItemsTemplate binden, und dem Grid das Layout überlassen. Hier gibt es ein Code-Beispiel: Generating grid dynamically in MVVM pattern.

Daß du keine fertige Lösung verwenden willst, heißt ja nicht, daß du nicht auch in Code von anderen Leuten reinschauen kannst, die das schon mal umgesetzt haben. Kalender wurden schon mehrfach umgesetzt, und der Algorithmus und das Datenmodell basieren meistens auf dem gleichen Prinzip.

Du solltest bei deinem Datenmodell dann halt noch beachten, daß sich Termine über mehrere Tage oder sogar Monate erstrecken können.

Thema: Wie benutze ich Konstruktoren und Parameter richtig?
Am im Forum: Grundlagen von C#

Zitat von cicero
Da fehlt mir die nötige Erfahrung.

Dir fehlen die Grundlagen, daher der Link auf den Artikel.
Zitat von cicero
Konvertierung von "int" in "PokerYT.SUI" nicht möglich.

Die Fehlermeldung ist doch relativ aussagekräftig: Du hast extra eine Enum dafür definiert, verwendest aber Integer-Werte.


Bitte lies dir mal die Grundlagen von C# durch. Du kannst nicht erwarten, daß dir das einfach so zufliegt...

Thema: Wie benutze ich Konstruktoren und Parameter richtig?
Am im Forum: Grundlagen von C#

Bitte poste deinen Code nicht als Plain-Text und verwende Code-Tags [Hinweis] Wie poste ich richtig?

Ansonsten empfehle ich einen Blick in [FAQ] Wie finde ich den Einstieg in C#?

Thema: Audio-Peak von Anwendungen auslesen (Code inside) - Frage
Am im Forum: Grafik und Sound

Es gibt keine "einzelne Anwendung auf der Soundkarte". Die Soundkarte gibt nur Audio-Signale aus. Die Signale von den einzelnen Anwendungen werden im Betriebssystem gemischt, und dann auf der Soundkarte ausgegeben. Wenn du die Lautstärke einer bestimmten Anwendung messen willst, mußt du die Signale vor der Mischung abgreifen. Und dazu gibt es die genannte Schnittstelle.

Es gibt für die API eine Dokumentation und Quellcode-Beispiele. Sicherlich nicht für dein spezielles Problem, aber mit ein bißchen Anstrengung findest du dafür die Lösung.

Thema: Audio-Peak von Anwendungen auslesen (Code inside) - Frage
Am im Forum: Grafik und Sound

Das heißt Audio Session und dafür gibt es die WASAPI-Schnittstelle: Session Volume Controls

Thema: Events feuern nicht auf jedem PC
Am im Forum: Grundlagen von C#

Du solltest dir auch mal [Artikel] MVVM und DataBinding anschauen. Wenn man DataBinding verwendet, dann kann man weitestgehend auf Events verzichten, und man muß sich auch keine Sorgen machen, in welchem Thread was ausgeführt wird.

Und auch Datenbank-Operationen haben nichts in der UI verloren. Siehe dazu [Artikel] Drei-Schichten-Architektur

Wenn du das beruflich machst, solltest du dich mal mit den Grundlagen der Software-Entwicklung auseinandersetzen. Sonst wirst du immer wieder von einem "kuriosen" Problem zum anderen stolpern.

Thema: PDFs erstellen unter ASP.NET Core
Am im Forum: Web-Technologien

Ich hab mich entschieden, die PDF-Erstellung mit XSL-FO in Kombination mit Razor umzusetzen.

XSL-FO ist als Format genau dafür geschaffen worden, Druckdokumente zu erstellen, und ist leicht zu verstehen, wenn man mit HTML und CSS Erfahrung hat. Hier gibt es die Doku und ein paar Tutorials. Und mit Razor als Template-Engine kann man aus Daten einfach Reports erstellen, das kenne ich noch von ASP.NET MVC.

Ich verwende dazu das Package RazorEngineCore.

So kann man damit ein Template kompilieren und auswerten:


// Compiling is only done once
IRazorEngine razorEngine = new RazorEngine();
var compiledTemplate = await razorEngine.CompileAsync<RazorEngineTemplateBase<TModel>>(templateContent)
    .ConfigureAwait(false);

// Resolving a FO template for the specified model
string foTemplateResult = await compiledTemplate.RunAsync(instance =>
    {
        instance.Model = model;
    }).ConfigureAwait(false);

Für das Rendern des Templates in eine PDF verwende ich das Package Fonet.Standard (Source Code, Wiki). Das funktioniert soweit sehr gut. Ein paar Einschränkungen muß man dafür allerdings hinnehmen:
  • Bilder mit transparentem Hintergrund werden nicht unterstützt
  • SVGs werden nicht unterstützt (aber andere Vektor-Formate)
  • Tabellen mit automatischen Spaltenbreiten sind nicht möglich
  • Es können nur Schriftarten verwendet werden, die im Betriebssystem installiert sind

So funktioniert das Rendern der PDF:


var foNetDriver = FonetDriver.Make();
foNetDriver.Options = /* Set PDF options */;
foNetDriver.CloseOnExit = false; // Don't close stream after rendering
foNetDriver.ImageHandler = /* Set callback to load images from files or resources */;
foNetDriver.Render(foInputStream, pdfOutputStream);

Insgesamt sind das ca. 100 Zeilen Code in einer .NET-Standard-Bibliothek, die wir zukünftig für Web- und Desktop-Anwendungen verwenden können.

Das Template sieht z.B. so aus:

<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">  
  <fo:layout-master-set>
    <fo:simple-page-master master-name="simple" page-height="29.7cm" page-width="21cm" margin-top="2cm" margin-bottom="2cm" margin-left="2cm" margin-right="2cm">
      <fo:region-body region-name="page-body" margin-bottom="2cm" margin-top="2cm" />
      <fo:region-before region-name="page-header" extent="2cm" />
      <fo:region-after region-name="page-footer" extent="2cm" />
    </fo:simple-page-master>
  </fo:layout-master-set>
  
  <fo:page-sequence master-reference="simple" font-family="Montserrat">
    <fo:static-content flow-name="page-header">
      <fo:block font-family="Montserrat SemiBold" font-size="22pt">
        <fo:external-graphic src="logo.png" height="22pt" margin-right="1cm" />
        @Model.CompanyName
      </fo:block>
    </fo:static-content>
    
    <fo:static-content flow-name="page-footer">
      <fo:block margin-top="2cm" text-align="right" font-style="italic" color="#777777">
        @Model.Copyright
      </fo:block>
    </fo:static-content>
    
    <fo:flow flow-name="page-body">

      <fo:table table-layout="fixed" 
                inline-progression-dimension="auto"
                width="100%" 
                padding-after="2cm"
                font-size="8pt">
        <fo:table-column column-number="1" column-width="5cm" />
        <fo:table-column column-number="2" />
        <fo:table-column column-number="3" />
        <fo:table-column column-number="4" />
        <fo:table-column column-number="5" />

        <fo:table-header border-after-style="solid" 
                         border-after-color="black" 
                         border-after-width="thin">
          <fo:table-row font-weight="bold">
            <fo:table-cell>
              <fo:block>
                Mitarbeiter
              </fo:block>
            </fo:table-cell>
            <fo:table-cell>
              <fo:block>
                Datum
              </fo:block>
            </fo:table-cell>
            <fo:table-cell>
              <fo:block>
                Position
              </fo:block>
            </fo:table-cell>
            <fo:table-cell>
              <fo:block>
                Team
              </fo:block>
            </fo:table-cell>
            <fo:table-cell>
              <fo:block>
                Email
              </fo:block>
            </fo:table-cell>
          </fo:table-row>
        </fo:table-header>
        
        <fo:table-body>
          @{ int i = 0; }
          @foreach (var item in Model.Employees)
          {
            <fo:table-row background-color="@(++i % 2 == 0 ? "white" : "#f7f7f7")">
              <fo:table-cell>
                <fo:block>
                  @item.Salutation @item.FirstName @item.LastName 
                </fo:block>
              </fo:table-cell>
              <fo:table-cell>
                <fo:block>
                  @item.DateOfEntry.ToString("dd.MM.yy")
                </fo:block>
              </fo:table-cell>
              <fo:table-cell>
                <fo:block>
                  @item.WorkPosition
                </fo:block>
              </fo:table-cell>
              <fo:table-cell>
                <fo:block>
                  @item.Team
                </fo:block>
              </fo:table-cell>
              <fo:table-cell>
                <fo:block>
                  <fo:basic-link external-destination="mailto:@item.EmailAdress">@item.EmailAdress</fo:basic-link>
                </fo:block>
              </fo:table-cell>
            </fo:table-row>
          }
        </fo:table-body>
      </fo:table>
    </fo:flow>
  </fo:page-sequence>
</fo:root>

Wenn die Schema-Datei im gleichen Verzeichnis liegt wie die Template-Dateien, bekommt man in Visual Studio sogar Intellisense für XSL-FO.

Das mag vielleicht ein bißchen over-engineered aussehen, ist aber wesentlich besser als DevExpress- und Crystal-Reports oder die Konvertierung von HTML- oder Word-Dateien.

Thema: PDFs erstellen unter ASP.NET Core
Am im Forum: Web-Technologien

Danke für die schnellen Antworten!

Zitat von gfoidl
ist XSL-FO eine Option?

Ich glaube, das ist das, wonach ich gesucht hatte. Eine Auszeichnungssprache für Druckdokumente. Ein erster Test hat gezeigt, daß es macht, was es soll. Jetzt werde ich mal ein komplexeres Layout umsetzen.

Danke!

Thema: PDFs erstellen unter ASP.NET Core
Am im Forum: Web-Technologien

Hallo allerseits,

ich bin auf der Suche nach einer Möglichkeit, PDF-Dateien aus Templates + Daten zu erstellen. Diese Dateien sollen mehrseitig, möglichst barrierefrei zugänglich sein, und mit Seiten-Headern und -Footern ausgestattet sein. Das ganze soll in einer ASP.NET Core Web-Anwendung unter Linux laufen.

Bisher haben wir dafür das Reporting-Tool von DevExpress verwendet. Dafür hat man das Layout in einem proprietären Editor zusammengefrickelt, und dann die Daten per "DataBinding" in das Layout gefrickelt. Im Zuge der Umstellung auf .NET 5 wollen wir davon wegmigrieren.

Ich war ein bißchen ernüchtert, nachdem ich diesen Artikel gelesen hatte: Creating A PDF In .NET Core. Jemand hat dort die aktuellen (2019) Möglichkeiten evaluiert. Die Kommentare darunter sind auch sehr aufschlußreich. Offenbar gibt es kein Tool von kostenlos bis extrem teuer, das unsere Anforderungen abdeckt. Entweder gibt es keine Lösung für .NET Core, oder es läuft nicht unter Linux, oder es werden bei Seitenumbrüchen die Hälfte der letzten Zeile auf Seite 1 und die andere Hälfte der Zeile auf Seite 2 gedruckt, was für professionelle Dokumente natürlich nicht akzeptabel ist.

Und alle Bibiotheken, die kein Templating unterstützen, wo man also jedes Element selbst auf der Seite positionieren muß, kommt für unsere Zwecke nicht in Frage.

Meine erste Idee war daher, ein HTML- bzw. Razor-Template zu verwenden, und das dann in einem Headless-Chromium-Browser auf dem Server in ein PDF zu rendern. Aber leider eignet sich HTML nicht als Druckformat, denn sich auf allen Seiten wiederholende Header und Footer werden z.B. derzeit nur mit sehr häßlichen Workarounds unterstützt.

Eine andere Idee ist, mit Hilfe des Open XML SDK ein Word-Dokument zu erstellen, und das dann mittels LibreOffice per Kommandozeile in ein PDF zu konvertieren. Das scheint die einzige Möglichkeit zu sein, die alle unsere Anforderungen abdeckt. Aber vom Aufwand her übertrifft das noch das Erstellen von DevExpress-Reports.

Hat jemand etwas ähnliches schon im Einsatz? Oder gibt es andere Ideen?

Thema: Wie bringe ich XAML in Code behind? (Fluent Ribbon)
Am im Forum: GUI: WPF und XAML

Ich verweise an der Stelle mal auf diesen Beitrag: Wie kann ich eine Collection von Dictionarys in einer Listview anzeigen?

Zitat von gijoe222
……...Was für eine dumme und arrogante Antwort. Wie alt bist du? 10? Kein Wunder werden deutsche Foren gemieden wie die sau.

Das müssen wir hier nicht noch einmal wiederholen

Thema: WPF App (Win10) wird beim Start gekillt
Am im Forum: GUI: WPF und XAML

Was heißt ohne Erfolg? Wenn es eine unbehandelte Ausnahme gibt, wird das entsprechende Ereignis ausgelöst.

Thema: WPF App (Win10) wird beim Start gekillt
Am im Forum: GUI: WPF und XAML

Catch and display unhandled exceptions in your WPF app

Thema: Wie kann ich die Reaktion auf Eingabe in ComboBox/TextBox verzögern?
Am im Forum: GUI: Windows-Forms

Wenn du System.Reactive.Linq verwendest, kannst du die einfach die Events als Observable abonnieren und die Observable.Throttle-Methode verwenden. In der Doku gibt es ein Beispiel.

Thema: Wie mache ich einen Task zum Arbeiten im Hintergrund asynchron?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Die WebClient-Methoden sind aber schon asynchrone Methoden, die hast du in deinem Beispiel nicht. Du willst Code parallel ausführen. Dafür reicht im einfachsten Fall ein Aufruf von Parallel.ForEach.

Ich empfehle, dir mal die Doku zu Tasks, asynchroner Programmierung und der Parallel-Klasse bzw. PLinq durchzulesen, damit du verstehst, worum es geht. Asynchrone Programmierung und parallele Programmierung sind zwei unterschiedliche Sachen.

Thema: WPF App (Win10) wird beim Start gekillt
Am im Forum: GUI: WPF und XAML

Zitat von Abt
ich sehe gerade, dass die Applikation auf Q liegt, was nach Netzlaufwerk riecht.

Wenn es ein Netzlaufwerk ist, wird es mit Sicherheit daran liegen. Dann versuch mal, die Anwendung von einem nicht-Netzlaufwerk zu starten.

Thema: Wie erstelle ich Textblöcke analog der SelectedCells eines Datagrids?
Am im Forum: GUI: WPF und XAML

Ich weiß auch nicht, wie man dir da weiterhelfen sollte. Normalerweise ist die Herangehensweise immer die gleiche:

  • Zuerst erstellt man ein Datenmodell, mit dem man alle Funktionen und Berechnungen durchführen kann, die für das Programm benötigt werden
  • Dann implementiert man die Funktionen mit Hilfe des Datenmodells
  • Dann testet man alle Funktionen mit Hilfe von Unit-Tests
  • Und zum Schluß erstellt man eine Benutzeroberfläche für das Programm.


Du willst die ersten Schritte auslassen, und mit dem letzten Schritt beginnen. Dann kommst du von einem Problem zum nächsten, und von einem Workaround zum anderen, und keiner kann mehr deine Herangehensweise nachvollziehen, oder deinen Code verstehen, um dir da weiterhelfen zu können. Überleg dir nur mal, an wie vielen Stellen du deinen Code anpassen müßtest, wenn sich die Spaltenbreite im DataGrid von 50 auf 100 Pixel ändern würde.

Niemand wird dich davon abhalten, so weiterzumachen. Aber dann kannst du halt auch keine Hilfe im Forum erwarten, weil niemand so arbeiten würde. Mit dem Debugger könntest du dich von Rechenschritt zu Rechenschritt hangeln, und nachvollziehen, was dein Code macht, und dann berichtigen. Siehe dazu [Artikel] Debugger: Wie verwende ich den von Visual Studio?

Empfehlen würde ich allerdings eine etwas strukturiertere Herangehensweise, und erstmal ein geeignetes Datenmodell zu erstellen. Dann kannst du deine Berechnungen so implementieren, daß sie für dich (und andere) auch in ein paar Wochen oder Monaten noch nachvollziehbar sind.

Thema: ObservableCollection mit Umterklasse ObservableCollection auslesen
Am im Forum: Grundlagen von C#

Mit foreach kann man jede Auflistung durchlaufen, die das IEnumerable- bzw. das generische IEnumerable<T>-Interface implementiert. Und ObservableCollection<T> implementiert IEnumerable<T>.

Die Eigenschaft VersandDaten, die du durchlaufen willst, ist aber vom Typ MainViewModel.VersandDaten, und diese implementiert nicht IEnumerable, das sagt die Fehlermeldung.


PS:

Zitat
"Wie poste ich richtig" ist manchmal schwer das Thema in den wenigen Worten zu formulieren...

Die Fehlermeldung und den entsprechenden Code-Ausschnitt zu posten, ist schon irgendwie notwendig, um dir in einem Forum weiterhelfen zu können.

Thema: ObservableCollection mit Umterklasse ObservableCollection auslesen
Am im Forum: Grundlagen von C#

Was heißt "funktioniert nicht"? Welche Fehlermeldung bekommst du?

Siehe dazu [Hinweis] Wie poste ich richtig?, Punkt 5 "Problem genau beschreiben - inkl. genauer Fehlermeldung - und konkrete Fragen stellen"

Thema: Wie erstelle ich Textblöcke analog der SelectedCells eines Datagrids?
Am im Forum: GUI: WPF und XAML

Die vorgeschlagenen Lösungen sind im Grunde nur Workarounds für ein Problem, das es ohne DataGrid nicht gäbe.

Das Problem kommt daher, daß du in der View das DataGrid verwendest, und das dann wieder im ViewModel brauchst, um die Textblöcke zu positionieren.

Ein DataGrid braucht man, wenn man große Mengen an Daten anzeigen, sortieren, gruppieren usw. muß. Es ist nicht dafür gedacht, ein Layout zu erstellen. Besonders nicht, wenn man etwas außerhalb des DataGrids positionieren möchte, wie es bei dir der Fall ist.

Bei dir sind es offenbar wenige Daten, die in einem gleichmäßigen Raster dargestellt werden sollen. Und dann sollen in dem gleichen Raster zusätzliche Textblöcke eingefügt werden.

Dafür gibt es schon ein Steuerelement, nämlich das Grid. Und im ViewModel kannst du alles genauso konfigurieren, wie du es brauchst, und dann an die View binden. Siehe dazu meine vorherigen Beiträge.

Thema: Wie erstelle ich Textblöcke analog der SelectedCells eines Datagrids?
Am im Forum: GUI: WPF und XAML

Du hast jetzt alles im ViewModel implementiert, und greifst trotzdem vom ViewModel auf die View zu, indem du DataGridCellInfo verwendest.

Die Idee der Schichtentrennung ist doch eben, daß das ViewModel nicht die View kennt und das Model nicht das ViewModel etc.

Wenn du deinen Code mal mit Unit-Tests testen würdest, dann würdest du auch merken, wie wichtig so etwas ist. Siehe dazu [Artikel] Unit-Tests: Einführung in das Unit-Testing mit VisualStudio

Lies dir nochmal die Antworten oben und die verlinkten Artikel durch, dann wird es vielleicht klarer, was gemeint ist.

Ich würde nach wie vor davon abraten, dafür ein DataGrid zu verwenden. Das macht die Sache nur unnötig kompliziert.

Zitat von CombatKarl
Aber wie stelle ich denn fest, ob Start -und Endpunkte sich überschneiden ??

Das sind doch am Ende nur (wenn alles korrekt implementiert ist) zwei Vergleiche.
Wenn ein Endpunkt oder ein Startpunkt eines Panels größer als der Startpunkt und kleiner als der Endpunkt eines anderen Panels ist, dann überschneiden sie sich.

Thema: Taschenrechner Panel neu Füllen
Am im Forum: GUI: Windows-Forms

Meinst du:

myPanel.Controls.Clear();

Siehe die Dokumentation zur Control.ControlCollection.Clear-Methode.

Siehe dazu auch: [Tipp] Schau in die Doku! - Möglichkeiten der Informationsgewinnung

Thema: Registry Eintrag prüfen -> null Exception
Am im Forum: Grundlagen von C#

Siehe dazu auch gleich das erste Beispiel in [FAQ] NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt "Wie die NullReferenceException entsteht"

Thema: Wie kann ich im Codebehind in einer Schleife mehrere ScrollViewer anlegen?
Am im Forum: GUI: WPF und XAML

Zitat von marc_s
Im ViewModel kriege ich ja das ListView z.B. in einer foreach Schleife mehrmals instanziiert

Dann verwendest du ja kein Binding. Nimm stattdessen lieber ein ItemsControl, das du an eine ObservableCollection bindest. So wie in dem Beispiel von Wilfried, oder in den Beispielen in [Artikel] MVVM und DataBinding

Thema: Wie kann ich im DataGridView alle Ergebnisse in eine Zeile einfügen (nicht in mehrere)?
Am im Forum: GUI: Windows-Forms

Siehe dazu der von Abt verlinkte Hinweis: [Hinweis] Wie poste ich richtig?

Punkt 2.3

Zitat
Full Quotes (also das vollständige Wiederholen des/eines vorangegangenen Beitrags als Zitat) sind nicht erwünscht

Thema: Wie erstelle ich Textblöcke analog der SelectedCells eines Datagrids?
Am im Forum: GUI: WPF und XAML

Zitat von CombatKarl
Wie könnte denn deiner Meinung nach eine solche Klasse gestaltet sein & welche Properties wären denn notwendig ?

Ich meine eine Datenstruktur, die es dir ermöglicht, deine Anwendungslogik zu implementieren. Hier also ein regelmäßiges Grid aus Zeilen und Spalten, um Zellen zu selektieren und mit Inhalten zu befüllen. Das hat ersteinmal nichts mit der Benutzeroberfläche zu tun, siehe dazu [Artikel] Drei-Schichten-Architektur

Mit dieser Datenstruktur kannst du dann die Positionen, Größen und Inhalte der Zellen direkt an die View binden, z.B. an ein Grid oder (wie vonTh69 vorgeschlagen) an eine Canvas.

Der Unterschied zwischen Grid und Canvas wäre, daß ein Grid nur regelmäßige Zeilen und Spalten besitzt, und Elemente in einem Canvas völlig frei positionierbar sind.

Thema: Wie erstelle ich Textblöcke analog der SelectedCells eines Datagrids?
Am im Forum: GUI: WPF und XAML

Zitat von CombatKarl
Aktuell komme ich bereits an dem Punkt nicht weiter, wie der Code zu gestalten ist, wenn die Textblöcke unterhalb meines Datagrids erstellt & positioniert werden.

Ich wüßte auch nicht, wie man das so implementieren würde. Deshalb hatte ich Vorschläge gemacht, wie es funktionieren könnte.

Thema: DataGidView DataBinding WPF wahrscheinlich Verständnisproblem
Am im Forum: GUI: WPF und XAML

Wenn es einen Bindingfehler gibt, steht der während der Ausführung im Ausgabefenster bzw. auch (in VS 2019) im Fenster für die WPF-Bindingfehler.

Ansonsten kannst du dir die Inhalte im Live Visual Tree anschauen bzw. mit einem DebugConverter. Siehe dazu den Abschnitt "Debugging" im MVVM-Artikel.

Thema: ComboBox SelectedItem update - wird aber nicht unmittelbar angezeigt
Am im Forum: GUI: WPF und XAML

Einfacher wäre evtl. bei einer Änderung direkt im ViewModel den Text anzupassen, und dann an die ComboBox.Text-Eigenschaft zu binden.