77 lines
2.7 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|