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?
}
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
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);
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
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 😉
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code