using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using Avalonia.Controls; using Avalonia.Interactivity; using Avalonia.Markup.Xaml; using PolyTrader.App.Avalonia.ViewModels; using PolyTrader.Core.Modularity; using PolyTrader.Core.Persistence; using PolyTraderSharp; using PolyTraderSharp.Models; namespace PolyTrader.App.Avalonia.Views { /// /// Modulübergreifendes Dashboard aus dem Core-Trade-Log. Aufbau und Verhalten entsprechen der /// bisherigen WinForms-Ansicht; die Auswertung kommt unverändert aus TradeAnalytics, /// die Diagramme jetzt aus (LiveCharts2). /// Layout vollständig in DashboardWindow.axaml. /// public partial class DashboardWindow : UserControl { private readonly DashboardChartsModel _charts = new(); private readonly ObservableCollection _history = new(); private readonly ObservableCollection _modules = new(); private ITradeLogRepository? _tradeLog; private TradingState? _state; private IReadOnlyList? _moduleInfos; private string? _settingsPath; private List _allTrades = new(); private List _historyBase = new(); private bool _loading; public DashboardWindow() => AvaloniaXamlLoader.Load(this); /// /// Alle bekannten Module (auch deaktivierte) für den Tab „Module". null = kein /// Modul-Management (Tab wird ausgeblendet, z.B. im Smoke-Test). /// public DashboardWindow(IModuleUiHost host, ITradeLogRepository tradeLog, TradingState state, IReadOnlyList? moduleInfos = null, string? settingsPath = null) : this() { _tradeLog = tradeLog; _state = state; _moduleInfos = moduleInfos; _settingsPath = settingsPath; DataContext = _charts; this.FindControl("gridTrades")!.ItemsSource = _history; this.FindControl("gridModules")!.ItemsSource = _modules; var cbMode = this.FindControl("cbMode")!; var cbRange = this.FindControl("cbRange")!; var cbWinLoss = this.FindControl("cbWinLoss")!; cbMode.ItemsSource = new[] { "Alle", "Live", "Demo" }; cbRange.ItemsSource = new[] { "7 Tage", "30 Tage", "90 Tage", "Alle" }; cbWinLoss.ItemsSource = new[] { "Alle", "Gewinner", "Verlierer" }; cbMode.SelectedIndex = 0; cbRange.SelectedIndex = 1; // 30 Tage, wie bisher cbWinLoss.SelectedIndex = 0; this.FindControl