Laden...

Muss ich Page-Instanzen beim Schliessen zerstören? Und wenn ja: Wie?

Erstellt von CWolle vor 3 Jahren Letzter Beitrag vor 3 Jahren 599 Views
CWolle Themenstarter:in
57 Beiträge seit 2012
vor 3 Jahren
Muss ich Page-Instanzen beim Schliessen zerstören? Und wenn ja: Wie?

Ich habe ein MainWindow mit diversen Page-Instanzen erzeugt, die durch Clicks angezeigt werden.

Bei Clicks funktioniert im Programm auch alles, aber der Debugger zeigt mir zig BindingExpression-Fehler an. Muss ich die aktuell angezeigte Page bei einem Click immer zerstören? Und wie geht das?


public partial class Page_1 : Page
{
      public static MainWindow haupt;            
      public Page_1(ref MainWindow mw)
      {
            InitializeComponent(); 
            mw.DataContext = ...

OO gibts seit Platon - hatte der auch C#?

16.842 Beiträge seit 2008
vor 3 Jahren

Wir hatten ja schon in anderen Threads von Dir, dass Du MVVM nicht ordentlich anwendest; und hier sehe ich auch ein static, wo keines sein sollte.
Persönlich vermute ich insgesamt ein Folgefehler der falschen MVVM-Herangehensweise.

CWolle Themenstarter:in
57 Beiträge seit 2012
vor 3 Jahren
Korrektur

Entschuldigung, dass ich es falsch formuliert hatte, aber ich hatte noch nie behauptet, dass ich MVVM verwende.
Ich arbeite mit MVC-Pattern wegen Verwendung von RoutedUICommands in separaten Namespaces (die sind in MVVM gar nicht möglich) statt mit generischen Action<> und Func<>-Delegates.
MVVM ist doch erst bei größeren Anwendungen sinnvoll aufgrund des Overheads

OO gibts seit Platon - hatte der auch C#?

T
2.224 Beiträge seit 2008
vor 3 Jahren

MVVM ist nicht von der Größe der Anwendung abhängig sondern das gängige Muster nachdem man WPF Anwendungen entwickelt.
Du solltest dich damit dringend beschäftigen!

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

16.842 Beiträge seit 2008
vor 3 Jahren

MVVM ist doch erst bei größeren Anwendungen sinnvoll aufgrund des Overheads

MVVM hat einen gewissen Overhead; aber MVVM ist nun mal der Pattern, auf den die komplette WPF-Infrastruktur ausgelegt ist.

Der große Unterschied zwischen MVVM und MVC ist, dass MVVM eine Two-Way-Binding Strategie verfolgt und MVC nur ein One-Way-Binding. Das erklärt auch direkt, wieso MVC in den aller aller aller meisten WPF-Anwendungen überhaupt kein Sinn macht.
Das hat also nichts mit "Overhead" oder Größe der Anwendung zutun, sondern mit der Anwendungsstrategie an für sich.
Warum Du aber einen ganzen Pattern-Wechsel von MVVM auf MVC forcierst, und Dir damit entsprechende riesige Nachteile nur für RoutedUICommands ins Haus holst; versteh ich nicht.

Aber auch wenn Du nicht MVVM nutzen willst sondern MVC (Grund sei mal dahin gestellt); auch da arbeitet man auch absolut nirgends mit static; Du halt schon 😉
Kurz über die anderen Threads von Dir geflogen arbeitest Du aber mit Code Behinds; sieht also so aus, dass Dir eben das MVC-One-Way-Binding gar nicht reicht und Du einfach den falschen Pattern verwendest - und mit "schmutzigen Wegen" die MVC-Defizite versuchst zu umschiffen.

Vermutlich ist einer dieser "Workarounds" schuld, dass Dein Page-Handling falsch ist.

4.942 Beiträge seit 2008
vor 3 Jahren

Der ganze Code ist fehlerhaft:

  • Warum übergibst du das MainWindow per ref (du willst ja hoffentlich nicht aus einer Page heraus ein neues MainWindow erstellen?)?
  • Warum setzt du den DataContext von mv (also dem MainWindow), anstatt von der Page?

Aber was sollen deiner Meinung nach überhaupt die BindingExpression-Fehler mit deinem gezeigten Code zu tun haben? Zeige uns doch besser die Fehler sowie den Code dazu.

Ich nehme an, du meinst mit "der Debugger zeigt mir ..." Laufzeitfehler?! Dann ist schon das initiale Binding falsch.

Und noch: Wie bindest du denn, wenn du kein MVVM benutzt (denn den DataContext benutzt du ja)?

5.658 Beiträge seit 2006
vor 3 Jahren

Ich arbeite mit MVC-Pattern

MVC in WPF? Das ist doch für WinForms.

Aber wenn ich den Code so sehe, solltest du mal zwei, drei Schritte zurückgehen, und dir erstmal die C#-Grundlagen aneignen. Sonst wirst du immer nur frustriert sein, weil irgendwas nicht so funktioniert, wie du es dir vorstellst.

PS: Und mal ehrlich, warum stellst du eigentlich Fragen hier im Forum, wenn du dann alle Antworten und Ratschläge in den Wind schlägst? Dieser Thread ist von vor einem Jahr, und obwohl dir damals schon erklärt wurde, warum das überhaupt keinen Sinn ergibt, machst du es immer noch genauso: Binding geht verloren, statt sich zu aktualisieren

Weeks of programming can save you hours of planning