using Avalonia; using Avalonia.Controls; using Project_Periodensystem.Model; using Project_Periodensystem.Controller; namespace Project_Periodensystem.View { /// /// Hauptfenster der Avalonia-Anwendung - implementiert MVC-Pattern. /// Koordiniert NavigationService und PeriodensystemController. /// Löst zirkuläre Abhängigkeiten durch zweistufige Initialisierung. /// public partial class MainWindow : Window { /// /// Hauptbereich für Seitenwechsel zwischen PeriodicTablePage, AboutPage, etc. /// private ContentControl? mainContent; /// /// Zentrale Geschäftslogik für Periodensystem-Daten und -Operationen /// private readonly PeriodensystemController _dataController; /// /// Service für Navigation zwischen verschiedenen Anwendungsseiten /// private readonly NavigationService _navigationService; /// /// Konstruktor - initialisiert Avalonia-Komponenten und MVC-Architektur /// public MainWindow() { InitializeComponent(); // Avalonia UI initialisieren mainContent = this.FindControl("MainContent"); // Zweistufige Initialisierung wegen zirkulärer Abhängigkeiten: // 1. NavigationService mit MainWindow erstellen _navigationService = new NavigationService(this); // 2. Controller mit NavigationService erstellen _dataController = new PeriodensystemController(_navigationService); // 3. Controller an NavigationService zurückgeben (löst Zirkularität) _navigationService.SetDataController(_dataController); // Landing Page anzeigen ShowLandingPage(); } /// /// Zeigt die Landing Page an /// public void ShowLandingPage() { if (mainContent != null) { var landingPage = new LandingPage(); landingPage.SetController(_dataController); mainContent.Content = landingPage; Logger.Log("Landing Page angezeigt (mit Interface-basierter Navigation)"); } } /// /// Cleanup beim Schließen /// protected override void OnClosed(System.EventArgs e) { // NavigationService implementiert kein IDisposable mehr (keine Events) base.OnClosed(e); } } }