using CommunityToolkit.Mvvm.ComponentModel; using Microsoft.UI.Xaml; using XFEEDToolBox.Core.Presentation; namespace XFEEDToolBox.ViewModels; public partial class ToolboxViewModel { private CancellationTokenSource? activeMarketRead; private string displayedMarketScope="全部缓存 · 保持列表顺序"; [ObservableProperty,NotifyPropertyChangedFor(nameof(MarketQueryStatusVisibility))] public partial string MarketQueryStatus{get;set;}=""; public Visibility MarketQueryStatusVisibility=>MarketQueryStatus.Length==0?Visibility.Collapsed:Visibility.Visible; [ObservableProperty] public partial int MarketTabIndex{get;set;} [ObservableProperty,NotifyPropertyChangedFor(nameof(MarketQuoteDetailVisibility),nameof(MarketQuotePromptVisibility))] public partial MarketLiveRow? SelectedMarketRow{get;set;} public Visibility MarketQuoteDetailVisibility=>SelectedMarketRow is null?Visibility.Collapsed:Visibility.Visible; public Visibility MarketQuotePromptVisibility=>SelectedMarketRow is null?Visibility.Visible:Visibility.Collapsed; public Visibility MarketEmptyVisibility=>MarketRows.Count==0?Visibility.Visible:Visibility.Collapsed; public Visibility InventoryEmptyVisibility=>InventoryRows.Count==0?Visibility.Visible:Visibility.Collapsed; public bool MarketCanPreviousPage=>marketPage>0; public bool MarketCanNextPage=>MarketRows.Count==150; public string MarketScopeDescription=>displayedMarketScope; public string MarketEmptyMessage=>OnlyCurrentStation&&CurrentPlayer.MarketId is null ?"尚未读取当前站点市场,可切换到全部缓存查看。" :string.IsNullOrWhiteSpace(MarketSearch)?"缓存中尚无商品报价,可在工具维护中导入行情。":"没有匹配的商品、星系或站点,请调整搜索词。"; public string InventorySnapshotSource { get { var player=CurrentPlayer; var (source,at,reliable)=InventoryTab switch { 1=>("Journal 材料快照",player.MaterialsAt,player.MaterialsReliable), 2=>("ShipLocker.json / Journal",player.LockerAt,player.LockerReliable), 3=>("Backpack.json / Journal",player.BackpackAt,player.BackpackReliable), _=>("Cargo.json / Journal",player.CargoAt,player.CargoReliable) }; return source+(at is {} time?$" · {time.ToLocalTime():MM-dd HH:mm:ss}":" · 尚无采集时间")+(reliable?"":" · 等待完整记录"); } } private void RefreshMarketPresentation() { MarketQueryStatus=""; var scope=OnlyCurrentStation?CurrentPlayer.MarketId is null?"当前站点 · 尚未读取市场记录":"当前站点 · "+CurrentPlayer.StationName:"全部缓存"; displayedMarketScope=scope+" · "+(MarketSortIndex switch{1=>"采集时间 · 新到旧",2=>"买价 · 高到低",3=>"卖价 · 高到低",4=>"供给 · 高到低",5=>"需求 · 高到低",_=>"保持列表顺序"}); if(SelectedMarketRow is null||!MarketRows.Contains(SelectedMarketRow))SelectedMarketRow=MarketRows.FirstOrDefault(); foreach(var name in new[]{nameof(MarketEmptyVisibility),nameof(MarketEmptyMessage),nameof(MarketCanPreviousPage),nameof(MarketCanNextPage),nameof(MarketScopeDescription)})OnPropertyChanged(name); } private CancellationToken BeginMarketRead() { activeMarketRead?.Dispose(); activeMarketRead=CancellationTokenSource.CreateLinkedTokenSource(lifetime.Token); MarketQueryStatus="正在查询,结果更新前保留上次有效列表。"; return activeMarketRead.Token; } private void CancelMarketRead() { activeMarketRead?.Cancel(); MarketQueryStatus="正在查询,结果更新前保留上次有效列表。"; } private void RefreshInventoryPresentation() { OnPropertyChanged(nameof(InventoryEmptyVisibility));OnPropertyChanged(nameof(InventorySnapshotSource)); OnPropertyChanged(nameof(MarketScopeDescription));OnPropertyChanged(nameof(MarketEmptyMessage)); } }