Laden...

Wie in einem Frame im MainWindow durch Buttons Pages anzeigen, die einmalig initialisiert wurden?

Erstellt von Davidnh vor 3 Jahren Letzter Beitrag vor 3 Jahren 864 Views
D
Davidnh Themenstarter:in
21 Beiträge seit 2020
vor 3 Jahren
Wie in einem Frame im MainWindow durch Buttons Pages anzeigen, die einmalig initialisiert wurden?

Hallo,

ich habe in meinem MainWindow einen Frame, dessen Content pages sind, zwischen denen mit Buttons navigiert wird.

Bisher hatte ich es so gelöst, dass ich bei Button Betätigung immer eine neue Instanz der page erstelle, da ich nicht wusste wie ich sonst bei Button Betätigungen innerhalb der pages vorgehen soll.

Jetzt möchte ich es aber so machen, dass ich jede page einmalig initialisiere und dann nur noch navigiere, anstatt jedes mal eine neue page zu initialisieren.

Die große Frage: Wie könnte ich im folgenden Beispiel von Seite_1 aus den Content von Aktuelle_Seite ändern bzw. zu einer anderen page navigieren?

// MainWindow.xaml.cs*

public MainWindow()
        {           
            InitializeComponent();

        
            Seitenverwaltung.Seite_1 = new Seite_1();

 }

private void Button_Click(object sender, RoutedEventArgs e)
        {
            Aktuelle_Seite.Navigate(Seitenverwaltung.Seite_1); // Aktuelle_Seite ist mein Frame
}


//Seitenverwaltung.cs*
public static class Seitenverwaltung
    {
        
        public static Seite_1 Seite_1{ get; set; }
}


// Seite_1.xaml.cs*
public Seite_1()
        {
            InitializeComponent();
}

private void Zu_Seite_2_Click(object sender, RoutedEventArgs e)
        {         
           // was muss hier hin?
        }

D
161 Beiträge seit 2017
vor 3 Jahren

Hab mich damit letzte Woche beschäftigt und bin auf diese Seite gestoßen Navigation Between Pages

Steht hier auch irgendwo im Forum mit diesem Link.

Grüße

D
Davidnh Themenstarter:in
21 Beiträge seit 2020
vor 3 Jahren

Habs jetzt folgendermaßen gelöst


//in Seitenverwaltung:

public static Frame frame { get; set; }

//in MainWindow:

Seitenverwaltung.frame = Aktuelle_Seite;


//in Page_1

Seitenverwaltung.frame.Navigate(Seitenverwaltung.Page_2);

1.029 Beiträge seit 2010
vor 3 Jahren

Hi,

du brauchst doch gar kein static wenn du's ordentlich machst.

Gib den Pages entweder einen Verweis auf die Seitenverwaltung oder auf einen Service zur Seitenverwaltung.

Ich persönlich würde eine IPageNavigationService-Schnittstelle definieren, diese mit der Klasse PageNavigationService implementieren und dies entweder per DependencyInjection oder eben bei Erzeugung der Pages mitgeben, damit es einfach verwendet werden kann.

LG

16.834 Beiträge seit 2008
vor 3 Jahren

WPF bzw. .NET hat einen (einfachen) Navigation Service mit an Bord; man muss einfach mal die entsprechende Doku lesen 😉
WPF Navigation Service

Erweiterungen wie MvvmLight haben einen MVVM-konformen Navigation Service, der das Leben einfacher macht.

Aber globale Variablen oder static für sowas sind immer sehr starke Hinweis für: hier stimmt was nicht 😉