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

  • »
  • Community
  • |
  • Diskussionsforum
Methoden aus WPF MainWindow Class in anderer Class aufrufen!
blueTheRookie
myCSharp.de - Member



Dabei seit:
Beiträge: 2
Herkunft: vo Dahoam

Themenstarter:

Methoden aus WPF MainWindow Class in anderer Class aufrufen!

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16205

beantworten | zitieren | melden

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.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
blueTheRookie
myCSharp.de - Member



Dabei seit:
Beiträge: 2
Herkunft: vo Dahoam

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Deaktiviertes Profil
myCSharp.de - Member



Dabei seit:
Beiträge: 996

beantworten | zitieren | melden

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?
private Nachricht | Beiträge des Benutzers
Taipi88
myCSharp.de - Member

Avatar #avatar-3220.jpg


Dabei seit:
Beiträge: 1044
Herkunft: Mainz

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
ThomasE.
myCSharp.de - Member



Dabei seit:
Beiträge: 453

beantworten | zitieren | melden

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...
private Nachricht | Beiträge des Benutzers
mfe
myCSharp.de - Member



Dabei seit:
Beiträge: 183

beantworten | zitieren | melden

Zitat von blueTheRookie
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.
Dieser Beitrag wurde 4 mal editiert, zum letzten Mal von mfe am .
private Nachricht | Beiträge des Benutzers
ThomasE.
myCSharp.de - Member



Dabei seit:
Beiträge: 453

beantworten | zitieren | melden

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...
private Nachricht | Beiträge des Benutzers