Laden...

Methoden aus WPF MainWindow Class in anderer Class aufrufen!

Erstellt von blueTheRookie vor 6 Jahren Letzter Beitrag vor 6 Jahren 5.354 Views
B
blueTheRookie Themenstarter:in
2 Beiträge seit 2017
vor 6 Jahren
Methoden aus WPF MainWindow Class in anderer Class aufrufen!

Hi, im Moment bin ich etwas am "verzweifeln". Ich möchte die Werte einer Textbox in meinem WPF MainWindow mit Hilfe einer Schleife die in einem anderen Klasse (in normaler .cs Datei) in einer Methode Steckt, aktualisieren. Dies würde ich mit einer, in der MainWindow:Window Klasse (in xaml.cs Datei) definierten, Methode machen die mir den Text (genauer gesagt Zahlen aus einem Zufalls-Zahlen-Generator) in der Textbox überschreibt. Mein Problem ist nun: Scheinbar wird nur eine Instanz von dem Construktor von MainWindow:Window erstellt und nicht von meiner Partial Class MainWindo:Window. Ich kann also, wenn ich in der normalen .cs Datei (in der die Methode mit der Schleife steckt) die Instanz auf MainWindow aufrufe nur auf den Konstruktor und nicht auf meine Methoden in der Klasse zugreifen. Wie mache ich das am besten. Ich bin sehr dankbar über schnelle und für Anfänger gut lessbar geschriebene Hilfe.

16.835 Beiträge seit 2008
vor 6 Jahren

Die korrekte Umstetzung wäre via Data Binding.
[Artikel] MVVM und DataBinding

MVVM und Data Binding ist das Kernstück bei der Programmierung mit WPF.

B
blueTheRookie Themenstarter:in
2 Beiträge seit 2017
vor 6 Jahren

Ich habe gehört das man es auch ohne Data Binding lösen kann, irgendwie mit "Main-Methode sich selbst übergeben lassen" oder so ähnlich.

D
985 Beiträge seit 2014
vor 6 Jahren

Ja, man kann auch Pferde vor ein Auto spannen und selbiges von denen ziehen lassen damit es sich bewegt.

Möglich ja, aber sinnvoll und effizient?

1.029 Beiträge seit 2010
vor 6 Jahren

Hi,

ganz ehrlich - wenn du kein MVVM machen möchtest - dann nimm lieber WinForms - das ist für Frickelcode einfacher.

Was dein eigentliches Problem angeht - du scheinst hier offenkundig irgendwas am Prinzip deiner Objekte und Klassen zu übersehen.

Wenn dein Window erstellt wird - wird in der Tat nur ein einziges mal der Konstruktor aufgerufen. Wenn der Konstruktor allerdings nicht von dir geschrieben ist der dort aufgerufen wird - dann machst du etwas falsch. Was genau kann man ohne Code nicht sagen.

Wenn dein MainWindow per App.xaml erstellt wird - wird dort der nackige Konstruktor ohne jeglichen Parameter verwendet. Soweit der Standard.

Ganz ehrlich - Windows die per XAML erstellt werden sollten keine Konstruktorparameter verlangen. Alternativ wäre es auch möglich entsprechende Rahmenparameter aus der Anwendungskonfiguration zu ziehen.

Noch ganz anders - für deinen Fall allerdings nicht sinnvoll wie ich finde (vorgenannte Variante ist flexibler wie hart codierte Parameter) ist die Erstellung einer eigenen Program.cs mit normaler Main-Methode, die dann eine Instanz deiner umprogrammierten App.xaml.cs erstellt, worin du dann selbst dein Window erstellen kannst.

LG

T
461 Beiträge seit 2013
vor 6 Jahren

Hallo,

wie @Taipi88 schon sagt, blende hier mal etwas von deinem Code ein, dann kann man sich leichter ein Bild machen...

Grüße

Ich habe den Titel mal angepasst, so dass Suchende auch etwas damit anfangen können. EDIT: Ich sollte beim Wort "Shift" im Titel das "f" nicht vergessen... 😄

M
177 Beiträge seit 2009
vor 6 Jahren

Hi, im Moment bin ich etwas am "verzweifeln". Ich möchte die Werte einer Textbox in meinem WPF MainWindow mit Hilfe einer Schleife die in einem anderen Klasse (in normaler .cs Datei) in einer Methode Steckt, aktualisieren.

Du hast in deinem WPF Projekt eine App.xaml.cs. In dieser überschreibst du die OnStartup Methode. Dort drinnen erzeugst du die Window als auch deine Klassen Instanz. Beim Window die Show Methode aufrufen nicht vergessen! Die Textbox Werte aus dem Window kannst du über Methoden, public Members, Events an eine Klasse weiterreichen.

In der App.xaml entfernst du den Eintrag StartupUri="Window1.xaml". Damit verhinderst du, dass das Window nicht vom "XAML" erzeugt wird.

[Edit]
Viel einfacher wäre es, wenn du im Codebehind vom Window die Instanz deiner Klasse erzeugst.

T
461 Beiträge seit 2013
vor 6 Jahren

Noch einfacher wäre es mit DataBindings... anstatt hier herumzumurksen...

Ich habe den Titel mal angepasst, so dass Suchende auch etwas damit anfangen können. EDIT: Ich sollte beim Wort "Shift" im Titel das "f" nicht vergessen... 😄