Autor Beitrag
rapgru
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17
Erhaltene Danke: 1



BeitragVerfasst: Fr 30.01.15 11:02 
Hey Leute,

ich weiß das ist jetzt eine Frage die ich eigentlich selbst bentworten können müsste, aber:

Ich habe ein MainWindow, in der meine Symbolleiste ist und ein Menü, in dem man auswählen kann welche Page in den Frame geladen werden soll.
Der Rest des Fensters ist der Frame.

So, nun möchte ich wenn auf der Page mykontos ein Button gedrückt wird, dass die Visibility-Eigenschaft einer Label auf Visible gesetzt wird, sodass bei diesem Klick ein zweites Menü erscheint.
Also auf mykontos gibts ne ListView in der man seine Konten erstellen kann / löschen kann / etc. Wenn dann ein Projekt geladen wird, soll das Konto-Menü erscheinen, zur Verwaltung des geöffneten Kontos. Beim Schließen das Kontos wird das Menü wieder ausgeblendet.

So nun habe ich in MainWindow.xaml.cs folgende Funktion:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
public static void DoKont()
        {
            MainWindow m = new MainWindow();
            m.kontomenue_label.Visibility = System.Windows.Visibility.Visible;
            MessageBox.Show("Did changes");
        }


Und in mykontos.xaml.cs
ausblenden C#-Quelltext
1:
2:
3:
4:
private void button5_Click(object sender, RoutedEventArgs e)
        {
            MainWindow.DoKont();
        }


Die MessageBox wird beim drücken des Buttons angezeigt, die Label erscheint jedoch nicht. Was mache ich falsch??

LG rapgru
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 30.01.15 13:24 
Hallo,

danke ersteinmal, daß du hierfür ein neues Thema eröffnet hast (den Beitrag im anderen Thema habe ich gelöscht und das Thema wieder entsperrt).

Dein Grundfehler ist, daß du ein neues Objekt erstellt, anstatt das vorhandene zu benutzen. Und warum ist die Methode statisch (ich weiß die technische Antwort, aber du solltest sie dir selber beantworten)?
Wenn du von 'mykontos' Zugriff auf das MainWindow haben willst, dann solltest du dafür besser Ereignisse (events) benutzen - ein untergeordnetes Control (oder Window) sollte niemals Zugriff auf übergeordnete Controls haben.

Lies dir auch mal meinen Artikel dazu durch: Kommunikation von 2 Forms (gilt generell auch für WPF und MVVM).
rapgru Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17
Erhaltene Danke: 1



BeitragVerfasst: Fr 30.01.15 15:52 
Dankeschön, laut Beitrag sollte ich also in meiner MainWindow.xaml.cs folgendes schreiben:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
public Visibility LabelVisibility
  {
    get { return label.Visibility }
    set { label.Visibility = value; }
  }


Worauf ich dann von my Kontos zugreifen kann.

Habe ich das richtig verstanden?
rapgru Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17
Erhaltene Danke: 1



BeitragVerfasst: Fr 30.01.15 16:58 
So hab jetzt meine Eigenschaft in MainWindow.xaml.cs hineingeschrieben,
was aber nicht im Text steht ist wie ich diese Eigenschaft aufrufe.

Ich hab's mit
ausblenden C#-Quelltext
1:
2:
MainWindow me = new MainWindow();
me.LabelVisibility = Visibility.Visible;

gemacht. Scheint aber wieder nicht zu funktionieren. Was mache ich falsch?
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 30.01.15 17:15 
Wie schon geschrieben, erzeugst du so ein neues (unsichtbares) MainWindow-Objekt!
Du mußt entweder ein Ereignis von deiner Unterklasse 'mykontos' auslösen (und vom MainWindow abonnieren) oder aber (nicht so schöne, aber erstmal einfachere Lösung) übergib die MainWindow-Instanz an dem 'mykontos'-Konstruktor (und speichere diese Instanz in einer Membervariablen).
Ich weiß, für einen Anfänger, ersteinmal eine größere Hürde, aber nachdem man das einmal gemacht hat, geht das beim nächsten Mal aus dem Handgelenk.
rapgru Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17
Erhaltene Danke: 1



BeitragVerfasst: Fr 30.01.15 18:56 
Tja, dann werde ich die 2. Variante wählen :D

Nach dem Motto Code sagt mehr als 1000 Worte hätte ich zu meiner vollen Zufriedenheit noch ein Code-Snippet, da ich das Stück "übergib die MainWindow-Instanz an den Mykonos-Konstruktor" nicht mitchecke.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 30.01.15 19:04 
Ein Codebeispiel steht im vom TH69 geposteten Link. Ich würde dir empfehlen den zu lesen und zu versuchen ihn zu verstehen.

Shortcut : dort das Kapitel 'Typische Anfängerfehler - 1. Neues Form-Objekt erstellen'
Short-Shortcut : das letzte Codebeispiel in besagten Kapitel
rapgru Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17
Erhaltene Danke: 1



BeitragVerfasst: Fr 30.01.15 19:12 
So weit war ich schon.
Welchen Parameter muss ich dann beim laden von Mykontos in den Frame angeben? Logischerweise this oder?

Moderiert von user profile iconTh69: C#-Tags hinzugefügt
rapgru Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17
Erhaltene Danke: 1



BeitragVerfasst: Fr 30.01.15 19:14 
Jup, this funktioniert super! Dankeschön.

P.S.: Werd mir den Link sicher aufheben!

Moderiert von user profile iconTh69: C#-Tags hinzugefügt