Projekt_SS25/Project_Periodensystem.View/MainWindow.axaml.cs
2025-06-30 15:30:55 +02:00

77 lines
2.7 KiB
C#

using Avalonia;
using Avalonia.Controls;
using Project_Periodensystem.Model;
using Project_Periodensystem.Controller;
namespace Project_Periodensystem.View
{
/// <summary>
/// Hauptfenster der Avalonia-Anwendung - implementiert MVC-Pattern.
/// Koordiniert NavigationService und PeriodensystemController.
/// Löst zirkuläre Abhängigkeiten durch zweistufige Initialisierung.
/// </summary>
public partial class MainWindow : Window
{
/// <summary>
/// Hauptbereich für Seitenwechsel zwischen PeriodicTablePage, AboutPage, etc.
/// </summary>
private ContentControl? mainContent;
/// <summary>
/// Zentrale Geschäftslogik für Periodensystem-Daten und -Operationen
/// </summary>
private readonly PeriodensystemController _dataController;
/// <summary>
/// Service für Navigation zwischen verschiedenen Anwendungsseiten
/// </summary>
private readonly NavigationService _navigationService;
/// <summary>
/// Konstruktor - initialisiert Avalonia-Komponenten und MVC-Architektur
/// </summary>
public MainWindow()
{
InitializeComponent(); // Avalonia UI initialisieren
mainContent = this.FindControl<ContentControl>("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();
}
/// <summary>
/// Zeigt die Landing Page an
/// </summary>
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)");
}
}
/// <summary>
/// Cleanup beim Schließen
/// </summary>
protected override void OnClosed(System.EventArgs e)
{
// NavigationService implementiert kein IDisposable mehr (keine Events)
base.OnClosed(e);
}
}
}