diff --git a/CRSim/App.xaml.cs b/CRSim/App.xaml.cs index 35a8ed1..bcfddd1 100644 --- a/CRSim/App.xaml.cs +++ b/CRSim/App.xaml.cs @@ -51,8 +51,8 @@ services.AddTransient(); services.AddTransient(); services.AddTransient(); - services.AddTransient(); - services.AddTransient(); + services.AddTransient(); + services.AddTransient(); }).Build(); [STAThread] diff --git a/CRSim/Assets/StyleImages/Zibo/PrimaryScreen.png b/CRSim/Assets/StyleImages/Zibo/PrimaryScreen.png new file mode 100644 index 0000000..10c76a8 Binary files /dev/null and b/CRSim/Assets/StyleImages/Zibo/PrimaryScreen.png differ diff --git a/CRSim/CRSim.csproj b/CRSim/CRSim.csproj index 1c08749..2ead31b 100644 --- a/CRSim/CRSim.csproj +++ b/CRSim/CRSim.csproj @@ -9,7 +9,7 @@ 13.0 CRSim.App Assets\CRSimIcon.ico - 1.2.3.1 + 1.2.3.4 @@ -89,7 +89,7 @@ Code - + Code diff --git a/CRSim/Models/StylesInfoData.json b/CRSim/Models/StylesInfoData.json index 93d213c..80a6588 100644 --- a/CRSim/Models/StylesInfoData.json +++ b/CRSim/Models/StylesInfoData.json @@ -87,11 +87,11 @@ ] }, { - "UniqueId": "ZiBo PrimaryScreen", + "UniqueId": "Zibo PrimaryScreen", "Title": "淄博站主要看板", - "Station": "ZiBo", + "Station": "Zibo", "StyleName": "PrimaryScreenView", - "ImagePath": "Assets/StyleImages/ZiBo/PrimaryScreen.png", + "ImagePath": "Assets/StyleImages/Zibo/PrimaryScreen.png", "Parameters": [ "Station" ] diff --git a/CRSim/ViewModels/Windows/Stations/Zibo/PrimaryScreenViewModel.cs b/CRSim/ViewModels/Windows/Stations/Zibo/PrimaryScreenViewModel.cs new file mode 100644 index 0000000..e53e3e7 --- /dev/null +++ b/CRSim/ViewModels/Windows/Stations/Zibo/PrimaryScreenViewModel.cs @@ -0,0 +1,50 @@ +namespace CRSim.ViewModels.Zibo +{ + public class PrimaryScreenViewModel : ScreenViewModel + { + public ObservableCollection LeftScreen { get; private set; } = []; + public ObservableCollection RightScreen { get; private set; } = []; + public PrimaryScreenViewModel(ITimeService timeService, ISettingsService settingsService) + : base(timeService, settingsService) + { + ItemsPerPage = 8; + PageCount = 2; + timeService.RefreshSecondsElapsed += RefreshDisplay; + Initialize(); + } + private async void Initialize() + { + await WaitForDataLoadAsync(); + RefreshDisplay(null,null); + } + private void RefreshDisplay(object? sender, EventArgs e) + { + Application.Current.Dispatcher.Invoke(() => + { + int pageCount = (int)Math.Ceiling((double)TrainInfo.Count / (ItemsPerPage * PageCount)); + LeftScreen.Clear(); + RightScreen.Clear(); + int startIndex = CurrentPageIndex * ItemsPerPage * PageCount; + var leftItems = TrainInfo.Skip(startIndex).Take(ItemsPerPage).ToList(); + while (leftItems.Count < ItemsPerPage) + { + leftItems.Add(new TrainInfo()); + } + foreach (var item in leftItems) + { + LeftScreen.Add(item); + } + var rightItems = TrainInfo.Skip(startIndex + ItemsPerPage).Take(ItemsPerPage).ToList(); + while (rightItems.Count < ItemsPerPage) + { + rightItems.Add(new TrainInfo()); + } + foreach (var item in rightItems) + { + RightScreen.Add(item); + } + CurrentPageIndex = CurrentPageIndex + 1 >= Math.Min(_settings.MaxPages, pageCount) ? 0 : CurrentPageIndex + 1; + }); + } + } +}