using Avalonia.Controls; using Avalonia.Markup.Xaml; using IBKRTrader.App.Shell; using IBKRTrader.App.ViewModels; using IBKRTrader.Core.Logging; using IBKRTrader.Core.Modularity; using IBKRTrader.Core.Time; using IBKRTrader.Core.Trading; using IBKRTrader.Core.Workers; using IBKRTrader.Modules.CongressTrading; using IBKRTrader.Modules.CongressTrading.Database; namespace IBKRTrader.App.Views.Modules; /// /// Fenster des CongressTrading-Moduls: DB-Kennzahlen, manueller Scrape-Auslöser und die offenen /// Positionen des Moduls (aus dem Core-Portfolio). /// /// DB-Zugriffe laufen NUR beim Anzeigen und auf Nutzerinteraktion – nie im Konstruktor, /// damit die Konstruktionsprüfung auch ohne Datenbank durchläuft. /// public partial class CongressTradingWindow : Window { private const string ScrapeWorkerName = "CT-ScrapeWorker"; private readonly CongressRepository _repo; private readonly WorkerEngine _engine; private readonly IPortfolioService _portfolio; private readonly LoggingService _logger; public CongressTradingWindow(IModuleUiHost uiHost, CongressRepository repo, WorkerEngine engine, IPortfolioService portfolio, LoggingService logger) { _repo = repo; _engine = engine; _portfolio = portfolio; _logger = logger; InitializeComponent(); WindowMenu.Wire(this.FindControl("WindowMenuBar")!, uiHost, "congresstrading.main"); this.FindControl