Laden...

Freigeben von Resourcen (Dispose) bei UserControls

Erstellt von echdeneth vor 3 Jahren Letzter Beitrag vor 3 Jahren 1.487 Views
echdeneth Themenstarter:in
161 Beiträge seit 2019
vor 3 Jahren
Freigeben von Resourcen (Dispose) bei UserControls

Moin und Gesundheit,

ganz sicher bin ich mir nicht bei der Formulierung meines Anliegens, weshalb im um Nachsicht bitte.

Ich habe eine Anwendung (public partial class MainWindow : Window) in dem innerhalb eines Grid, 6 UserControl (UC) über entsprechende Button geladen (?) werden können.

Muss ich die beim Wechsel in ein anderes UC, Klassen/Variablen/etc. händisch disposen und wenn ja innerhalb des UC oder im MainWindow?

Die Frage stelle ich weil ich den Eindruck habe das die UC nicht "geleert" wurden.
Verwendete Farben werden entweder in der App.xaml deklariert oder:


SolidColorBrush MegaBlau, MegaBlauDunkel;

...

MegaBlau = (SolidColorBrush)new BrushConverter().ConvertFrom("#006ba0");
MegaBlauDunkel = (SolidColorBrush)new BrushConverter().ConvertFrom("#004171");

Dementsprechende Lektionen sind in der Schule bislang nicht enthalten.

Ich hoffe mein Anliegen verständlich dargelegt zu haben.

LD Marko

"Man muß die Dinge so einfach wie möglich machen. Aber nicht einfacher." Albert Einstein

5.657 Beiträge seit 2006
vor 3 Jahren

Die Lösung ist ganz einfach: Definiere alle deine Resourcen in XAML und verwende sie auch ausschließlich dort. Dann mußt du dich auch nicht um die Freigabe kümmern.

Weeks of programming can save you hours of planning

echdeneth Themenstarter:in
161 Beiträge seit 2019
vor 3 Jahren

...Definiere alle deine Resourcen in XAML und verwende sie auch ausschließlich dort...

leicht gesagt 😃
Bei Farben ist das nicht schwer (habe ich grad kürzlich eine neue Erkenntnis gewonnen).
Aber wie sieht es mit im CodeBehind definierten Klassen und anderen Gedöns aus?

Ich habe manchmal den Eindruck das da was nachhängt beim Wechsel in ein anderes UserControl, habe aber nicht die Erfahrung dies in Erfahrung zu bringen.

"Man muß die Dinge so einfach wie möglich machen. Aber nicht einfacher." Albert Einstein

301 Beiträge seit 2009
vor 3 Jahren

Da wäre dann die Frage warum du sie explizit im Codebehind erstellen musst?

Erzeugst du aus deinen Daten entsprechende UI Elemente? Wenn ja ist hier das Konzept von DataTemplates und DataTemplateSelector im Zusammenhang mit ContentControl und ItemsControl vermutlich von Interesse.

echdeneth Themenstarter:in
161 Beiträge seit 2019
vor 3 Jahren

Da wäre dann die Frage warum du sie explizit im Codebehind erstellen musst?

z.B.


public static MySqlCommand cmd;
public static MySqlDataReader reader;
DataTable dt = new DataTable(); // unter Umständen...
private ObservableCollection<LiefModel> _lieferant = new ObservableCollection<LiefModel>();
List<zusammListe> ZusammListe = new List<zusammListe>();
u.s.w....

solche Dinge....

...DataTemplates und DataTemplateSelector im Zusammenhang mit ContentControl und ItemsControl vermutlich von Interesse.

Jo, guck ich mal...

"Man muß die Dinge so einfach wie möglich machen. Aber nicht einfacher." Albert Einstein

16.788 Beiträge seit 2008
vor 3 Jahren

Im Endeffekt sind das alles Folgefehler weil Du kein ordentliches MVVM machst.
Die Lieferanten kannst Du problemlos sauber als Entitäten aus der DB ziehen, in Modelle übertragen und dann binden.

Es ist quasi alles in MVVM abdeckbar.

Wenn man static bei Datenbankzeugs sieht, dann sieht das auch nach nem richtig groben Schnitzer aus 😉

5.657 Beiträge seit 2006
vor 3 Jahren

Wenn du mit "Klassen und anderen Gedöns" Datenbankabfragen meinst, dann haben die in der Benutzeroberfläche nichts zu suchen. Die Abfrage von Daten aus Datenbanken und die Definition von Farben in der UI haben nichts miteinander zu tun.

Ich habe manchmal den Eindruck das da was nachhängt beim Wechsel in ein anderes UserControl, habe aber nicht die Erfahrung dies in Erfahrung zu bringen.

Was genau meinst du damit?

Weeks of programming can save you hours of planning

echdeneth Themenstarter:in
161 Beiträge seit 2019
vor 3 Jahren

Im Endeffekt sind das alles Folgefehler weil Du kein ordentliches MVVM machst.
...
Es ist quasi alles in MVVM abdeckbar...

Das Problem ist, ich kapiere MVVM nicht richtig, einige Aspekte sind mir unklar.
Die Anleitungen und Tutorials (In der Berufsschule gibt es kein MVVM X(, und die Lehrer haben auch nicht wirklich Ahnung) sind zu spezifisch,
nicht nachvollziebar für mich.
Ich habe Probleme beim ModelView und alles so zu gestalten das die View das ModelView findet (Wonach sucht es? (Datacontext))
Weswegen ich MVVM auch nicht nutzen kann. Ich weiss das MVVM DIE!eins!elf! Lösung für mich wäre,
kann ich sie jedoch nicht nutzen.

Wenn man static bei Datenbankzeugs sieht, dann sieht das auch nach nem richtig groben Schnitzer aus 😉

DAS werde ich mal checken

"Man muß die Dinge so einfach wie möglich machen. Aber nicht einfacher." Albert Einstein

echdeneth Themenstarter:in
161 Beiträge seit 2019
vor 3 Jahren

Fragliches Gedöns befindet sich nicht in der UI sondern im CodeBehind
also in der "gedoens.xaml.cs", und fortgeschrittene Programmiertechniken
beherrsche ich noch nicht und waren auch noch kein Bestandteil der Umschulung (2.Lj.)

Was genau meinst du damit?

Man merkt ja wenn ein wiederholtes Laden (zwischendurch nat. einen andere UC) einer UserControl
etwas schwammiger wird oft kaum wahrnehmbar aber dennoch... ergo...

"Man muß die Dinge so einfach wie möglich machen. Aber nicht einfacher." Albert Einstein

5.657 Beiträge seit 2006
vor 3 Jahren

Ich habe Probleme beim ModelView und alles so zu gestalten das die View das ModelView findet (Wonach sucht es? (Datacontext))

Siehe [Artikel] MVVM und DataBinding:

2.2 Instanziierung des ViewModels
Das ViewModel wird im Konstruktor der View instanziiert oder per Konstruktor-Parameter übergeben. Auch in XAML ist die Instanziierung möglich. Wichtig dabei ist, die
>
der View auf die Instanz des ViewModels zu setzen:

  
public partial class MainWindow : Window  
{  
  public MainWindow()  
  {  
  	InitializeComponent();  
  	this.DataContext = new MainViewModel();  
  }  
}  
  

Oder alternativ mit Hilfe von XAML:

  
<Window.DataContext>  
  <local:MainViewModel />  
</Window.DataContext>  
  

Daß man so etwas in einer Ausbildung lernt, darfst du einfach nicht erwarten. Es gibt ja noch wesentlich mehr Technologien als WPF, die allein aus Zeitgründen nicht so ausführlich behandelt werden können. Da mußt du ein wenig Eigeninitiative aufbringen, wenn du dich in eine bestimmte Technologie, die du für deine Arbeit brauchst, einarbeiten möchtest.

Weeks of programming can save you hours of planning