using System.Globalization; using Avalonia.Controls; using Avalonia.Markup.Xaml; using Avalonia.Media; using IBKRTrader.App.Shell; using IBKRTrader.App.ViewModels; using IBKRTrader.Core.Modularity; using IBKRTrader.Core.Settings; using IBKRTrader.Core.Time; using IBKRTrader.Core.Trading; using IBKRTrader.Core.Workers; using Microsoft.Extensions.Configuration; namespace IBKRTrader.App.Views; /// /// Core-Ansicht: Gesamtüberblick (Handelsmodus, aggregierte Kennzahlen, geladene Module). /// DB-Zugriffe laufen NUR auf Anzeige und Nutzerinteraktion – nie im Konstruktor, damit die /// Konstruktionsprüfung (--smoke-ui) auch ohne Datenbank fehlerfrei durchläuft. /// public partial class DashboardWindow : Window { private readonly DashboardService _dashboard; private readonly SettingsService _settings; private readonly IReadOnlyList _modules; private readonly IConfiguration _config; private readonly int _workerCount; public DashboardWindow(IModuleUiHost uiHost, DashboardService dashboard, SettingsService settings, IEnumerable modules, IConfiguration config, IEnumerable workers) { _dashboard = dashboard; _settings = settings; _modules = modules.ToList(); _config = config; _workerCount = workers.Count(); InitializeComponent(); WindowMenu.Wire(this.FindControl("WindowMenuBar")!, uiHost, "core.dashboard"); this.FindControl