diff --git a/CRSim.ScreenSimulator/ViewModels/Ankang/ExitScreenViewModel.cs b/CRSim.ScreenSimulator/ViewModels/Ankang/ExitScreenViewModel.cs index 6418e38..8a09977 100644 --- a/CRSim.ScreenSimulator/ViewModels/Ankang/ExitScreenViewModel.cs +++ b/CRSim.ScreenSimulator/ViewModels/Ankang/ExitScreenViewModel.cs @@ -1,79 +1,16 @@ using CRSim.Core.Services; -using CRSim.ScreenSimulator.Models; -using System.Collections.ObjectModel; using CRSim.Core.Models; -using System.Windows; - namespace CRSim.ScreenSimulator.ViewModels.Ankang { public class ExitScreenViewModel : ScreenViewModel { - private ITimeService _timeService; - public ObservableCollection LeftScreen { get; private set; } = []; - public ObservableCollection RightScreen { get; private set; } = []; public ExitScreenViewModel(ITimeService timeService, ISettingsService settingsService) : base(timeService, settingsService) { - _timeService = timeService; Text = $"西安局集团公司推出西铁行APP站车服务产品,欢迎体验使用。"; ItemsPerPage = 7; PageCount = 1; StationType = StationType.Arrival; - 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(); - int startIndex = CurrentPageIndex * ItemsPerPage * PageCount; - var leftItems = TrainInfo.Skip(startIndex).Take(ItemsPerPage).ToList(); - while (leftItems.Count < ItemsPerPage) // Fill up with new object() if not enough items - { - leftItems.Add(new TrainInfo()); - } - foreach (var item in leftItems) - { - LeftScreen.Add(item); - } - CurrentPageIndex = CurrentPageIndex + 1 >= Math.Min(_settings.MaxPages, pageCount) ? 0 : CurrentPageIndex + 1; - }); - } - public override void RefreshData(object? sender, EventArgs e) - { - if (CurrentPageIndex == 0) - { - List itemsToRemove = []; - foreach (TrainInfo trainInfo in TrainInfo) - { - if (trainInfo.DepartureTime == null) - { - if (trainInfo.ArrivalTime.Value.Add(_settings.StopDisplayFromArrivalDuration) < _timeService.GetDateTimeNow()) - { - itemsToRemove.Add(trainInfo); - } - } - else - { - if (trainInfo.DepartureTime.Value < _timeService.GetDateTimeNow()) - { - itemsToRemove.Add(trainInfo); - } - } - } - foreach (var item in itemsToRemove) - { - TrainInfo.Remove(item); - } - } - } - } } diff --git a/CRSim.ScreenSimulator/ViewModels/Beijing/ArrivalScreenViewModel.cs b/CRSim.ScreenSimulator/ViewModels/Beijing/ArrivalScreenViewModel.cs index 25206ba..6f84316 100644 --- a/CRSim.ScreenSimulator/ViewModels/Beijing/ArrivalScreenViewModel.cs +++ b/CRSim.ScreenSimulator/ViewModels/Beijing/ArrivalScreenViewModel.cs @@ -1,63 +1,14 @@ using CRSim.Core.Models; using CRSim.Core.Services; -using CRSim.ScreenSimulator.Models; -using System.Collections.ObjectModel; -using System.Windows; namespace CRSim.ScreenSimulator.ViewModels.Beijing { public class ArrivalScreenViewModel : ScreenViewModel { - private ITimeService _timeService; - public ObservableCollection Screen { get; set; } = []; public ArrivalScreenViewModel(ITimeService timeService, ISettingsService settingsService) : base(timeService, settingsService) - { - _timeService = timeService; - StationType = StationType.Arrival; - timeService.RefreshSecondsElapsed += RefreshDisplay; - Initialize(); - } - private async void Initialize() { ItemsPerPage = 2; - await WaitForDataLoadAsync(); - RefreshDisplay(null,null); - } - private void RefreshDisplay(object? sender, EventArgs e) - { - Application.Current.Dispatcher.Invoke(() => - { - Screen.Clear(); - for (int i = 0; i < ItemsPerPage; i++) - { - Screen.Add(TrainInfo.Count > i ? TrainInfo[i] : new()); - } - }); - } - public override void RefreshData(object? sender, EventArgs e) - { - List itemsToRemove = []; - foreach (TrainInfo trainInfo in TrainInfo) - { - if (trainInfo.DepartureTime == null) - { - if (trainInfo.ArrivalTime.Value.Add(_settings.StopDisplayFromArrivalDuration) < _timeService.GetDateTimeNow()) - { - itemsToRemove.Add(trainInfo); - } - } - else - { - if (trainInfo.DepartureTime.Value < _timeService.GetDateTimeNow()) - { - itemsToRemove.Add(trainInfo); - } - } - } - foreach (var item in itemsToRemove) - { - TrainInfo.Remove(item); - } + StationType = StationType.Arrival; } } } diff --git a/CRSim.ScreenSimulator/ViewModels/BeijingXi/PrimaryScreenViewModel.cs b/CRSim.ScreenSimulator/ViewModels/BeijingXi/PrimaryScreenViewModel.cs index 34c6cc7..4dc56fd 100644 --- a/CRSim.ScreenSimulator/ViewModels/BeijingXi/PrimaryScreenViewModel.cs +++ b/CRSim.ScreenSimulator/ViewModels/BeijingXi/PrimaryScreenViewModel.cs @@ -1,59 +1,15 @@ using CRSim.Core.Models; using CRSim.Core.Services; -using CRSim.ScreenSimulator.Models; -using System.Collections.ObjectModel; -using System.Windows; namespace CRSim.ScreenSimulator.ViewModels.BeijingXi { 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 = 13; PageCount = 2; StationType = StationType.Departure; - 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) // Fill up with new object() if not enough items - { - leftItems.Add(new TrainInfo()); - } - foreach (var item in leftItems) - { - LeftScreen.Add(item); - } - - // Get the slice for the right screen (next 12) - var rightItems = TrainInfo.Skip(startIndex + ItemsPerPage).Take(ItemsPerPage).ToList(); - while (rightItems.Count < ItemsPerPage) // Fill up with new object() if not enough items - { - rightItems.Add(new TrainInfo()); - } - foreach (var item in rightItems) - { - RightScreen.Add(item); - } - - CurrentPageIndex = CurrentPageIndex + 1 >= Math.Min(_settings.MaxPages, pageCount) ? 0 : CurrentPageIndex + 1; - }); } } } diff --git a/CRSim.ScreenSimulator/ViewModels/ChengduDong/PillarTicketCheckScreenViewModel.cs b/CRSim.ScreenSimulator/ViewModels/ChengduDong/PillarTicketCheckScreenViewModel.cs index 9f34a49..811f9d0 100644 --- a/CRSim.ScreenSimulator/ViewModels/ChengduDong/PillarTicketCheckScreenViewModel.cs +++ b/CRSim.ScreenSimulator/ViewModels/ChengduDong/PillarTicketCheckScreenViewModel.cs @@ -17,15 +17,8 @@ namespace CRSim.ScreenSimulator.ViewModels.ChengduDong : base(timeService, settingsService) { StationType = StationType.Departure; - timeService.OneSecondElapsed += RefreshDisplay; - Initialize(); } - private async void Initialize() - { - await WaitForDataLoadAsync(); - RefreshDisplay(null, null); - } - private void RefreshDisplay(object? sender, EventArgs e) + public override void RefreshDisplay(object? sender, EventArgs e) { Application.Current.Dispatcher.Invoke(() => { diff --git a/CRSim.ScreenSimulator/ViewModels/ChengduDong/PrimaryTicketCheckScreenViewModel.cs b/CRSim.ScreenSimulator/ViewModels/ChengduDong/PrimaryTicketCheckScreenViewModel.cs index f4168fc..3dd477f 100644 --- a/CRSim.ScreenSimulator/ViewModels/ChengduDong/PrimaryTicketCheckScreenViewModel.cs +++ b/CRSim.ScreenSimulator/ViewModels/ChengduDong/PrimaryTicketCheckScreenViewModel.cs @@ -1,37 +1,15 @@ using CRSim.Core.Models; using CRSim.Core.Services; -using CRSim.ScreenSimulator.Models; -using System.Collections.ObjectModel; -using System.Windows; namespace CRSim.ScreenSimulator.ViewModels.ChengduDong { public class PrimaryTicketCheckScreenViewModel : ScreenViewModel { - public ObservableCollection Screen { get; set; } = []; public PrimaryTicketCheckScreenViewModel(ITimeService timeService, ISettingsService settingsService) : base(timeService, settingsService) { Text = "持户口簿、护照、临时身份证的旅客,请在非居民身份证通道排队。请主动礼让老、弱、病、残、孕的旅客。"; - StationType = StationType.Departure; - timeService.RefreshSecondsElapsed += RefreshDisplay; - Initialize(); - } - private async void Initialize() - { ItemsPerPage = 2; - await WaitForDataLoadAsync(); - RefreshDisplay(null,null); - } - private void RefreshDisplay(object? sender, EventArgs e) - { - Application.Current.Dispatcher.Invoke(() => - { - Screen.Clear(); - for (int i = 0; i < ItemsPerPage; i++) - { - Screen.Add(TrainInfo.Count > i ? TrainInfo[i] : new()); - } - }); + StationType = StationType.Departure; } } } diff --git a/CRSim.ScreenSimulator/ViewModels/ChengduDong/SecondaryScreenViewModel.cs b/CRSim.ScreenSimulator/ViewModels/ChengduDong/SecondaryScreenViewModel.cs index 34bd78e..3229156 100644 --- a/CRSim.ScreenSimulator/ViewModels/ChengduDong/SecondaryScreenViewModel.cs +++ b/CRSim.ScreenSimulator/ViewModels/ChengduDong/SecondaryScreenViewModel.cs @@ -1,14 +1,9 @@ using CRSim.Core.Models; using CRSim.Core.Services; -using System.Windows; -using CRSim.ScreenSimulator.Models; -using System.Collections.ObjectModel; namespace CRSim.ScreenSimulator.ViewModels.ChengduDong { public class SecondaryScreenViewModel : ScreenViewModel { - public ObservableCollection LeftScreen { get; private set; } = []; - public ObservableCollection RightScreen { get; private set; } = []; public SecondaryScreenViewModel(ITimeService timeService, ISettingsService settingsService) : base(timeService, settingsService) { @@ -16,42 +11,6 @@ namespace CRSim.ScreenSimulator.ViewModels.ChengduDong ItemsPerPage = 12; PageCount = 2; StationType = StationType.Departure; - 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; - }); } } } diff --git a/CRSim.ScreenSimulator/ViewModels/DaqingDong/ConcourseBridgeScreenViewModel.cs b/CRSim.ScreenSimulator/ViewModels/DaqingDong/ConcourseBridgeScreenViewModel.cs index c33ccbd..d3ee144 100644 --- a/CRSim.ScreenSimulator/ViewModels/DaqingDong/ConcourseBridgeScreenViewModel.cs +++ b/CRSim.ScreenSimulator/ViewModels/DaqingDong/ConcourseBridgeScreenViewModel.cs @@ -1,36 +1,15 @@ using CRSim.Core.Models; using CRSim.Core.Services; -using CRSim.ScreenSimulator.Models; -using System.Collections.ObjectModel; -using System.Windows; namespace CRSim.ScreenSimulator.ViewModels.DaqingDong { public class ConcourseBridgeScreenViewModel : ScreenViewModel { - public ObservableCollection Screen { get; set; } = []; public ConcourseBridgeScreenViewModel(ITimeService timeService, ISettingsService settingsService) : base(timeService, settingsService) { + ItemsPerPage = 3; StationType = StationType.Departure; timeService.RefreshSecondsElapsed += RefreshDisplay; - Initialize(); - } - private async void Initialize() - { - ItemsPerPage = 3; - await WaitForDataLoadAsync(); - RefreshDisplay(null,null); - } - private void RefreshDisplay(object? sender, EventArgs e) - { - Application.Current.Dispatcher.Invoke(() => - { - Screen.Clear(); - for (int i = 0; i < ItemsPerPage; i++) - { - Screen.Add(TrainInfo.Count > i ? TrainInfo[i] : new()); - } - }); } } } diff --git a/CRSim.ScreenSimulator/ViewModels/DaqingDong/PlatformScreenViewModel.cs b/CRSim.ScreenSimulator/ViewModels/DaqingDong/PlatformScreenViewModel.cs index 0841574..1e7fb8a 100644 --- a/CRSim.ScreenSimulator/ViewModels/DaqingDong/PlatformScreenViewModel.cs +++ b/CRSim.ScreenSimulator/ViewModels/DaqingDong/PlatformScreenViewModel.cs @@ -1,62 +1,13 @@ using CRSim.Core.Services; -using CRSim.ScreenSimulator.Models; -using System.Collections.ObjectModel; -using System.Windows; namespace CRSim.ScreenSimulator.ViewModels.DaqingDong { public class PlatformScreenViewModel : ScreenViewModel { - private ITimeService _timeService; - public ObservableCollection Screen { get; set; } = []; public PlatformScreenViewModel(ITimeService timeService, ISettingsService settingsService) : base(timeService, settingsService) { - _timeService = timeService; - timeService.RefreshSecondsElapsed += RefreshDisplay; + ItemsPerPage = 1; Text = $"请站在白色安全线以内排队候车"; - Initialize(); - } - private async void Initialize() - { - await WaitForDataLoadAsync(); - RefreshDisplay(null,null); - } - private void RefreshDisplay(object? sender, EventArgs e) - { - Application.Current.Dispatcher.Invoke(() => - { - Screen.Add(TrainInfo.Count > 0 ? TrainInfo[0] : new()); - if (Screen.Count == 1) return; - Screen.RemoveAt(0); - }); - } - public override void RefreshData(object? sender, EventArgs e) - { - if (CurrentPageIndex == 0) - { - List itemsToRemove = []; - foreach (TrainInfo trainInfo in TrainInfo) - { - if (trainInfo.DepartureTime == null) - { - if (trainInfo.ArrivalTime.Value.Add(_settings.StopDisplayFromArrivalDuration) < _timeService.GetDateTimeNow()) - { - itemsToRemove.Add(trainInfo); - } - } - else - { - if (trainInfo.DepartureTime.Value < _timeService.GetDateTimeNow()) - { - itemsToRemove.Add(trainInfo); - } - } - } - foreach (var item in itemsToRemove) - { - TrainInfo.Remove(item); - } - } } } } diff --git a/CRSim.ScreenSimulator/ViewModels/Fuzhou/TicketCheckScreenViewModel.cs b/CRSim.ScreenSimulator/ViewModels/Fuzhou/TicketCheckScreenViewModel.cs index a2402dc..94cf586 100644 --- a/CRSim.ScreenSimulator/ViewModels/Fuzhou/TicketCheckScreenViewModel.cs +++ b/CRSim.ScreenSimulator/ViewModels/Fuzhou/TicketCheckScreenViewModel.cs @@ -1,37 +1,15 @@ using CRSim.Core.Services; -using CRSim.ScreenSimulator.Models; -using System.Collections.ObjectModel; using CRSim.Core.Models; -using System.Windows; namespace CRSim.ScreenSimulator.ViewModels.Fuzhou { public class TicketCheckScreenViewModel : ScreenViewModel { - public ObservableCollection Screen { get; set; } = []; public TicketCheckScreenViewModel(ITimeService timeService, ISettingsService settingsService) : base(timeService, settingsService) { Text = $"开车前{settingsService.GetSettings().StopCheckInAdvanceDuration.TotalMinutes}分钟停止检票"; - StationType = StationType.Departure; - timeService.RefreshSecondsElapsed += RefreshDisplay; - Initialize(); - } - private async void Initialize() - { ItemsPerPage = 4; - await WaitForDataLoadAsync(); - RefreshDisplay(null,null); - } - private void RefreshDisplay(object? sender, EventArgs e) - { - Application.Current.Dispatcher.Invoke(() => - { - Screen.Clear(); - for (int i = 0; i < ItemsPerPage; i++) - { - Screen.Add(TrainInfo.Count > i ? TrainInfo[i] : new()); - } - }); + StationType = StationType.Departure; } } } diff --git a/CRSim.ScreenSimulator/ViewModels/FuzhouNan/TicketCheckScreenViewModel.cs b/CRSim.ScreenSimulator/ViewModels/FuzhouNan/TicketCheckScreenViewModel.cs index 21455e3..7e8e53c 100644 --- a/CRSim.ScreenSimulator/ViewModels/FuzhouNan/TicketCheckScreenViewModel.cs +++ b/CRSim.ScreenSimulator/ViewModels/FuzhouNan/TicketCheckScreenViewModel.cs @@ -1,37 +1,15 @@ using CRSim.Core.Services; -using CRSim.ScreenSimulator.Models; -using System.Collections.ObjectModel; using CRSim.Core.Models; -using System.Windows; namespace CRSim.ScreenSimulator.ViewModels.FuzhouNan { public class TicketCheckScreenViewModel : ScreenViewModel { - public ObservableCollection Screen { get; set; } = []; public TicketCheckScreenViewModel(ITimeService timeService, ISettingsService settingsService) : base(timeService, settingsService) { Text = $"开车前{settingsService.GetSettings().StopCheckInAdvanceDuration.TotalMinutes}分钟停止检票"; - StationType = StationType.Departure; - timeService.RefreshSecondsElapsed += RefreshDisplay; - Initialize(); - } - private async void Initialize() - { ItemsPerPage = 6; - await WaitForDataLoadAsync(); - RefreshDisplay(null,null); - } - private void RefreshDisplay(object? sender, EventArgs e) - { - Application.Current.Dispatcher.Invoke(() => - { - Screen.Clear(); - for (int i = 0; i < ItemsPerPage; i++) - { - Screen.Add(TrainInfo.Count > i ? TrainInfo[i] : new()); - } - }); + StationType = StationType.Departure; } } } diff --git a/CRSim.ScreenSimulator/ViewModels/GuangdongIntercity/SecondaryScreenViewModel.cs b/CRSim.ScreenSimulator/ViewModels/GuangdongIntercity/SecondaryScreenViewModel.cs index f4e014c..b492759 100644 --- a/CRSim.ScreenSimulator/ViewModels/GuangdongIntercity/SecondaryScreenViewModel.cs +++ b/CRSim.ScreenSimulator/ViewModels/GuangdongIntercity/SecondaryScreenViewModel.cs @@ -1,45 +1,14 @@ -using System.Windows; -using CRSim.Core.Services; -using CRSim.ScreenSimulator.Models; -using System.Collections.ObjectModel; +using CRSim.Core.Services; namespace CRSim.ScreenSimulator.ViewModels.GuangdongIntercity { public class SecondaryScreenViewModel : ScreenViewModel { - public ObservableCollection Screen { get; private set; } = []; public SecondaryScreenViewModel(ITimeService timeService, ISettingsService settingsService) : base(timeService, settingsService) { + Text = $"列 车 到 发 信 息"; ItemsPerPage = 8; PageCount = 1; - timeService.RefreshSecondsElapsed += RefreshDisplay; - Text = $"列 车 到 发 信 息"; - 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)); - Screen.Clear(); - int startIndex = CurrentPageIndex * ItemsPerPage * PageCount; - var Items = TrainInfo.Skip(startIndex).Take(ItemsPerPage).ToList(); - while (Items.Count < ItemsPerPage) // Fill up with new object() if not enough items - { - Items.Add(new TrainInfo()); - } - foreach (var item in Items) - { - Screen.Add(item); - } - - CurrentPageIndex = CurrentPageIndex + 1 >= Math.Min(_settings.MaxPages, pageCount) ? 0 : CurrentPageIndex + 1; - }); } } } diff --git a/CRSim.ScreenSimulator/ViewModels/Guangyuan/PrimaryScreenViewModel.cs b/CRSim.ScreenSimulator/ViewModels/Guangyuan/PrimaryScreenViewModel.cs index 9e44139..00c2c7a 100644 --- a/CRSim.ScreenSimulator/ViewModels/Guangyuan/PrimaryScreenViewModel.cs +++ b/CRSim.ScreenSimulator/ViewModels/Guangyuan/PrimaryScreenViewModel.cs @@ -1,13 +1,9 @@ using CRSim.Core.Services; -using CRSim.ScreenSimulator.Models; -using System.Collections.ObjectModel; -using System.Windows; using CRSim.Core.Models; namespace CRSim.ScreenSimulator.ViewModels.Guangyuan { public class PrimaryScreenViewModel : ScreenViewModel { - public ObservableCollection Screen { get; private set; } = []; public PrimaryScreenViewModel(ITimeService timeService, ISettingsService settingsService) : base(timeService, settingsService) { @@ -15,32 +11,6 @@ namespace CRSim.ScreenSimulator.ViewModels.Guangyuan ItemsPerPage = 12; PageCount = 1; StationType = StationType.Departure; - 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)); - Screen.Clear(); - int startIndex = CurrentPageIndex * ItemsPerPage * PageCount; - var items = TrainInfo.Skip(startIndex).Take(ItemsPerPage).ToList(); - while (items.Count < ItemsPerPage) - { - items.Add(new TrainInfo()); - } - foreach (var item in items) - { - Screen.Add(item); - } - CurrentPageIndex = CurrentPageIndex + 1 >= Math.Min(_settings.MaxPages, pageCount) ? 0 : CurrentPageIndex + 1; - }); } } } diff --git a/CRSim.ScreenSimulator/ViewModels/Hanzhong/PlatformScreenViewModel.cs b/CRSim.ScreenSimulator/ViewModels/Hanzhong/PlatformScreenViewModel.cs index 3516c0f..d925ae3 100644 --- a/CRSim.ScreenSimulator/ViewModels/Hanzhong/PlatformScreenViewModel.cs +++ b/CRSim.ScreenSimulator/ViewModels/Hanzhong/PlatformScreenViewModel.cs @@ -1,62 +1,13 @@ using CRSim.Core.Services; -using CRSim.ScreenSimulator.Models; -using System.Collections.ObjectModel; -using System.Windows; namespace CRSim.ScreenSimulator.ViewModels.Hanzhong { public class PlatformScreenViewModel : ScreenViewModel { - private ITimeService _timeService; - public ObservableCollection Screen { get; set; } = []; public PlatformScreenViewModel(ITimeService timeService, ISettingsService settingsService) : base(timeService, settingsService) { - _timeService = timeService; - timeService.RefreshSecondsElapsed += RefreshDisplay; + ItemsPerPage = 1; Text = "请注意列车与站台之间的间隙,请勿携带危险品上车"; - Initialize(); - } - private async void Initialize() - { - await WaitForDataLoadAsync(); - RefreshDisplay(null,null); - } - private void RefreshDisplay(object? sender, EventArgs e) - { - Application.Current.Dispatcher.Invoke(() => - { - Screen.Add(TrainInfo.Count > 0 ? TrainInfo[0] : new()); - if (Screen.Count == 1) return; - Screen.RemoveAt(0); - }); - } - public override void RefreshData(object? sender, EventArgs e) - { - if (CurrentPageIndex == 0) - { - List itemsToRemove = []; - foreach (TrainInfo trainInfo in TrainInfo) - { - if (trainInfo.DepartureTime == null) - { - if (trainInfo.ArrivalTime.Value.Add(_settings.StopDisplayFromArrivalDuration) < _timeService.GetDateTimeNow()) - { - itemsToRemove.Add(trainInfo); - } - } - else - { - if (trainInfo.DepartureTime.Value < _timeService.GetDateTimeNow()) - { - itemsToRemove.Add(trainInfo); - } - } - } - foreach (var item in itemsToRemove) - { - TrainInfo.Remove(item); - } - } } } -} +} \ No newline at end of file diff --git a/CRSim.ScreenSimulator/ViewModels/Harbin/PrimaryScreenViewModel.cs b/CRSim.ScreenSimulator/ViewModels/Harbin/PrimaryScreenViewModel.cs index bf700c1..a0b77d0 100644 --- a/CRSim.ScreenSimulator/ViewModels/Harbin/PrimaryScreenViewModel.cs +++ b/CRSim.ScreenSimulator/ViewModels/Harbin/PrimaryScreenViewModel.cs @@ -1,14 +1,9 @@ using CRSim.Core.Models; using CRSim.Core.Services; -using CRSim.ScreenSimulator.Models; -using System.Collections.ObjectModel; -using System.Windows; namespace CRSim.ScreenSimulator.ViewModels.Harbin { 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) { @@ -16,45 +11,6 @@ namespace CRSim.ScreenSimulator.ViewModels.Harbin ItemsPerPage = 6; PageCount = 2; StationType = StationType.Departure; - 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) // Fill up with new object() if not enough items - { - leftItems.Add(new TrainInfo()); - } - foreach (var item in leftItems) - { - LeftScreen.Add(item); - } - - // Get the slice for the right screen (next 12) - var rightItems = TrainInfo.Skip(startIndex + ItemsPerPage).Take(ItemsPerPage).ToList(); - while (rightItems.Count < ItemsPerPage) // Fill up with new object() if not enough items - { - rightItems.Add(new TrainInfo()); - } - foreach (var item in rightItems) - { - RightScreen.Add(item); - } - - CurrentPageIndex = CurrentPageIndex + 1 >= Math.Min(_settings.MaxPages, pageCount) ? 0 : CurrentPageIndex + 1; - }); } } } diff --git a/CRSim.ScreenSimulator/ViewModels/HarbinXi/PlatformScreenViewModel.cs b/CRSim.ScreenSimulator/ViewModels/HarbinXi/PlatformScreenViewModel.cs index ce99dfb..2c4b38d 100644 --- a/CRSim.ScreenSimulator/ViewModels/HarbinXi/PlatformScreenViewModel.cs +++ b/CRSim.ScreenSimulator/ViewModels/HarbinXi/PlatformScreenViewModel.cs @@ -1,62 +1,13 @@ using CRSim.Core.Services; -using CRSim.ScreenSimulator.Models; -using System.Collections.ObjectModel; -using System.Windows; namespace CRSim.ScreenSimulator.ViewModels.HarbinXi { public class PlatformScreenViewModel : ScreenViewModel { - private ITimeService _timeService; - public ObservableCollection Screen { get; set; } = []; public PlatformScreenViewModel(ITimeService timeService, ISettingsService settingsService) : base(timeService, settingsService) { - _timeService = timeService; - timeService.RefreshSecondsElapsed += RefreshDisplay; Text = $"请在白线内行走,乘降列车时注意脚下站台与列车之间的空隙,看护好老人和儿童。"; - Initialize(); - } - private async void Initialize() - { - await WaitForDataLoadAsync(); - RefreshDisplay(null,null); - } - private void RefreshDisplay(object? sender, EventArgs e) - { - Application.Current.Dispatcher.Invoke(() => - { - Screen.Add(TrainInfo.Count > 0 ? TrainInfo[0] : new()); - if (Screen.Count == 1) return; - Screen.RemoveAt(0); - }); - } - public override void RefreshData(object? sender, EventArgs e) - { - if (CurrentPageIndex == 0) - { - List itemsToRemove = []; - foreach (TrainInfo trainInfo in TrainInfo) - { - if (trainInfo.DepartureTime == null) - { - if (trainInfo.ArrivalTime.Value.Add(_settings.StopDisplayFromArrivalDuration) < _timeService.GetDateTimeNow()) - { - itemsToRemove.Add(trainInfo); - } - } - else - { - if (trainInfo.DepartureTime.Value < _timeService.GetDateTimeNow()) - { - itemsToRemove.Add(trainInfo); - } - } - } - foreach (var item in itemsToRemove) - { - TrainInfo.Remove(item); - } - } + ItemsPerPage = 1; } } } diff --git a/CRSim.ScreenSimulator/ViewModels/Jinanxi/SmallScreenViewModel.cs b/CRSim.ScreenSimulator/ViewModels/Jinanxi/SmallScreenViewModel.cs index 473c2ac..6fa5ebe 100644 --- a/CRSim.ScreenSimulator/ViewModels/Jinanxi/SmallScreenViewModel.cs +++ b/CRSim.ScreenSimulator/ViewModels/Jinanxi/SmallScreenViewModel.cs @@ -1,47 +1,21 @@ using CRSim.Core.Models; using CRSim.Core.Services; -using CRSim.ScreenSimulator.Models; -using System.Collections.ObjectModel; -using System.Windows; namespace CRSim.ScreenSimulator.ViewModels.Jinanxi { public class SmallScreenViewModel : ScreenViewModel { - public ObservableCollection Screen { get; private set; } = []; public SmallScreenViewModel(ITimeService timeService, ISettingsService settingsService) : base(timeService, settingsService) { ItemsPerPage = 9; PageCount = 1; StationType = StationType.Departure; - timeService.RefreshSecondsElapsed += RefreshDisplay; - Initialize(); + SetText(); } - private async void Initialize() + private async Task SetText() { - await WaitForDataLoadAsync(); + await DataLoaded.Task; Text = $"{string.Join(" ", ThisStation.Name.ToCharArray())} 站 欢 迎 您"; - RefreshDisplay(null,null); - } - private void RefreshDisplay(object? sender, EventArgs e) - { - Application.Current.Dispatcher.Invoke(() => - { - int pageCount = (int)Math.Ceiling((double)TrainInfo.Count / (ItemsPerPage * PageCount)); - Screen.Clear(); - int startIndex = CurrentPageIndex * ItemsPerPage * PageCount; - var Items = TrainInfo.Skip(startIndex).Take(ItemsPerPage).ToList(); - while (Items.Count < ItemsPerPage) // Fill up with new object() if not enough items - { - Items.Add(new TrainInfo()); - } - foreach (var item in Items) - { - Screen.Add(item); - } - - CurrentPageIndex = CurrentPageIndex + 1 >= Math.Min(_settings.MaxPages, pageCount) ? 0 : CurrentPageIndex + 1; - }); } } } diff --git a/CRSim.ScreenSimulator/ViewModels/Mianyang/PlatformScreenViewModel.cs b/CRSim.ScreenSimulator/ViewModels/Mianyang/PlatformScreenViewModel.cs index a7d34f3..bda7b53 100644 --- a/CRSim.ScreenSimulator/ViewModels/Mianyang/PlatformScreenViewModel.cs +++ b/CRSim.ScreenSimulator/ViewModels/Mianyang/PlatformScreenViewModel.cs @@ -1,62 +1,12 @@ using CRSim.Core.Services; -using CRSim.ScreenSimulator.Models; -using System.Collections.ObjectModel; -using System.Windows; namespace CRSim.ScreenSimulator.ViewModels.Mianyang { public class PlatformScreenViewModel : ScreenViewModel { - private ITimeService _timeService; - public ObservableCollection Screen { get; set; } = []; public PlatformScreenViewModel(ITimeService timeService, ISettingsService settingsService) : base(timeService, settingsService) { - _timeService = timeService; - timeService.RefreshSecondsElapsed += RefreshDisplay; - Initialize(); - } - private async void Initialize() - { - await WaitForDataLoadAsync(); - Text = ThisPlatform; - RefreshDisplay(null,null); - } - private void RefreshDisplay(object? sender, EventArgs e) - { - Application.Current.Dispatcher.Invoke(() => - { - Screen.Add(TrainInfo.Count > 0 ? TrainInfo[0] : new()); - if (Screen.Count == 1) return; - Screen.RemoveAt(0); - }); - } - public override void RefreshData(object? sender, EventArgs e) - { - if (CurrentPageIndex == 0) - { - List itemsToRemove = []; - foreach (TrainInfo trainInfo in TrainInfo) - { - if (trainInfo.DepartureTime == null) - { - if (trainInfo.ArrivalTime.Value.Add(_settings.StopDisplayFromArrivalDuration) < _timeService.GetDateTimeNow()) - { - itemsToRemove.Add(trainInfo); - } - } - else - { - if (trainInfo.DepartureTime.Value < _timeService.GetDateTimeNow()) - { - itemsToRemove.Add(trainInfo); - } - } - } - foreach (var item in itemsToRemove) - { - TrainInfo.Remove(item); - } - } + ItemsPerPage = 1; } } } diff --git a/CRSim.ScreenSimulator/ViewModels/Niuzhou/PrimaryScreenViewModel.cs b/CRSim.ScreenSimulator/ViewModels/Niuzhou/PrimaryScreenViewModel.cs index 1d2f86d..4de43c4 100644 --- a/CRSim.ScreenSimulator/ViewModels/Niuzhou/PrimaryScreenViewModel.cs +++ b/CRSim.ScreenSimulator/ViewModels/Niuzhou/PrimaryScreenViewModel.cs @@ -1,13 +1,9 @@ using CRSim.Core.Models; using CRSim.Core.Services; -using CRSim.ScreenSimulator.Models; -using System.Collections.ObjectModel; -using System.Windows; namespace CRSim.ScreenSimulator.ViewModels.Niuzhou { public class PrimaryScreenViewModel : ScreenViewModel { - public ObservableCollection LeftScreen { get; private set; } = []; public PrimaryScreenViewModel(ITimeService timeService, ISettingsService settingsService) : base(timeService, settingsService) { @@ -15,32 +11,6 @@ namespace CRSim.ScreenSimulator.ViewModels.Niuzhou ItemsPerPage = 10; PageCount = 1; StationType = StationType.Departure; - 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(); - int startIndex = CurrentPageIndex * ItemsPerPage * PageCount; - var leftItems = TrainInfo.Skip(startIndex).Take(ItemsPerPage).ToList(); - while (leftItems.Count < ItemsPerPage) // Fill up with new object() if not enough items - { - leftItems.Add(new TrainInfo()); - } - foreach (var item in leftItems) - { - LeftScreen.Add(item); - } - CurrentPageIndex = CurrentPageIndex + 1 >= Math.Min(_settings.MaxPages, pageCount) ? 0 : CurrentPageIndex + 1; - }); } } } diff --git a/CRSim.ScreenSimulator/ViewModels/ScreenViewModel.cs b/CRSim.ScreenSimulator/ViewModels/ScreenViewModel.cs index 1fe15dd..00f6155 100644 --- a/CRSim.ScreenSimulator/ViewModels/ScreenViewModel.cs +++ b/CRSim.ScreenSimulator/ViewModels/ScreenViewModel.cs @@ -2,7 +2,8 @@ using CRSim.Core.Services; using CRSim.Core.Models; using CRSim.ScreenSimulator.Models; -using System.ComponentModel; +using System.Windows; +using System.Collections.ObjectModel; namespace CRSim.ScreenSimulator.ViewModels { @@ -10,7 +11,7 @@ namespace CRSim.ScreenSimulator.ViewModels { public readonly ITimeService _timeService; public readonly Settings _settings; - private readonly TaskCompletionSource _dataLoaded = new(); + public readonly TaskCompletionSource DataLoaded = new(); [ObservableProperty] private DateTime _currentTime = new(); [ObservableProperty] @@ -23,6 +24,8 @@ namespace CRSim.ScreenSimulator.ViewModels private string _thisPlatform; [ObservableProperty] private string _thisTicketCheck; + public ObservableCollection LeftScreen { get; private set; } = []; + public ObservableCollection RightScreen { get; private set; } = []; public List TrainInfo { get; set; } = []; @@ -35,15 +38,27 @@ namespace CRSim.ScreenSimulator.ViewModels _settings = settingsService.GetSettings(); _timeService.OneSecondElapsed += OnTimeElapsed; + _timeService.RefreshSecondsElapsed += RefreshData; + _timeService.RefreshSecondsElapsed += RefreshDisplay; + Initialize(); } public int CurrentPageIndex = 0; - public int ItemsPerPage; - public int PageCount; + public int ItemsPerPage = 1; - public virtual void RefreshData(object? sender, EventArgs e) + // + // 适用于翻页屏的屏幕个数参数,非翻页屏请不要设置。 + // + public int? PageCount = null; + + private async void Initialize() { - if (CurrentPageIndex==0) + await DataLoaded.Task; + RefreshDisplay(null, null); + } + public void RefreshData(object? sender, EventArgs e) + { + if (CurrentPageIndex == 0) { List itemsToRemove = []; foreach(TrainInfo trainInfo in TrainInfo) @@ -57,7 +72,7 @@ namespace CRSim.ScreenSimulator.ViewModels } else { - if (trainInfo.DepartureTime.Value.Subtract(_settings.StopDisplayUntilDepartureDuration) < _timeService.GetDateTimeNow()) + if ((StationType == StationType.Arrival || StationType == StationType.Both ? trainInfo.DepartureTime.Value : trainInfo.DepartureTime.Value.Subtract(_settings.StopDisplayUntilDepartureDuration)) < _timeService.GetDateTimeNow()) { itemsToRemove.Add(trainInfo); } @@ -75,8 +90,6 @@ namespace CRSim.ScreenSimulator.ViewModels CurrentTime = _timeService.GetDateTimeNow(); } - public Task WaitForDataLoadAsync() => _dataLoaded.Task; - public void LoadData(Station station, string ticketCheck, string platform) { ThisStation = station; @@ -125,7 +138,76 @@ namespace CRSim.ScreenSimulator.ViewModels } TrainInfo = [.. TrainInfo.OrderBy(x => x.DepartureTime??x.ArrivalTime)]; RefreshData(null, null); - _dataLoaded.SetResult(true); + DataLoaded.SetResult(true); + } + public virtual void RefreshDisplay(object? sender, EventArgs e) + { + Application.Current.Dispatcher.Invoke(() => + { + if (PageCount == null) + { + for (int i = 0; i < ItemsPerPage; i++) + { + LeftScreen.Add(TrainInfo.Count > i ? TrainInfo[i] : new()); + } + if(LeftScreen.Count > ItemsPerPage) + { + for (int i = 0; i < ItemsPerPage; i++) + { + LeftScreen.RemoveAt(0); + } + } + return; + } + int pageCount = (int)Math.Ceiling((double)TrainInfo.Count / (ItemsPerPage * PageCount.Value)); + int startIndex = CurrentPageIndex * ItemsPerPage * PageCount.Value; + + switch (PageCount) + { + case 1: + { + LeftScreen.Clear(); + var items = TrainInfo.Skip(startIndex).Take(ItemsPerPage).ToList(); + while (items.Count < ItemsPerPage) + { + items.Add(new TrainInfo()); + } + foreach (var item in items) + { + LeftScreen.Add(item); + } + break; + } + case 2: + { + LeftScreen.Clear(); + RightScreen.Clear(); + + 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); + } + break; + } + } + + CurrentPageIndex = CurrentPageIndex + 1 >= Math.Min(_settings.MaxPages, pageCount) ? 0 : CurrentPageIndex + 1; + }); } } diff --git a/CRSim.ScreenSimulator/ViewModels/Shanghai/OutsideScreenViewModel.cs b/CRSim.ScreenSimulator/ViewModels/Shanghai/OutsideScreenViewModel.cs index b1e1958..d697ae7 100644 --- a/CRSim.ScreenSimulator/ViewModels/Shanghai/OutsideScreenViewModel.cs +++ b/CRSim.ScreenSimulator/ViewModels/Shanghai/OutsideScreenViewModel.cs @@ -1,45 +1,15 @@ using CRSim.Core.Services; using CRSim.Core.Models; -using CRSim.ScreenSimulator.Models; -using System.Collections.ObjectModel; -using System.Windows; namespace CRSim.ScreenSimulator.ViewModels.Shanghai { public class OutsideScreenViewModel : ScreenViewModel { - public ObservableCollection Screen { get; private set; } = []; public OutsideScreenViewModel(ITimeService timeService, ISettingsService settingsService) : base(timeService, settingsService) { ItemsPerPage = 9; PageCount = 1; StationType = StationType.Departure; - 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)); - Screen.Clear(); - int startIndex = CurrentPageIndex * ItemsPerPage * PageCount; - var items = TrainInfo.Skip(startIndex).Take(ItemsPerPage).ToList(); - while (items.Count < ItemsPerPage) - { - items.Add(new TrainInfo()); - } - foreach (var item in items) - { - Screen.Add(item); - } - CurrentPageIndex = CurrentPageIndex + 1 >= Math.Min(_settings.MaxPages, pageCount) ? 0 : CurrentPageIndex + 1; - }); } } } diff --git a/CRSim.ScreenSimulator/ViewModels/Tianjin/PlatformScreenViewModel.cs b/CRSim.ScreenSimulator/ViewModels/Tianjin/PlatformScreenViewModel.cs index d690715..a9c1aff 100644 --- a/CRSim.ScreenSimulator/ViewModels/Tianjin/PlatformScreenViewModel.cs +++ b/CRSim.ScreenSimulator/ViewModels/Tianjin/PlatformScreenViewModel.cs @@ -1,62 +1,12 @@ using CRSim.Core.Services; -using CRSim.ScreenSimulator.Models; -using System.Collections.ObjectModel; -using System.Windows; namespace CRSim.ScreenSimulator.ViewModels.Tianjin { public class PlatformScreenViewModel : ScreenViewModel { - private ITimeService _timeService; - public ObservableCollection Screen { get; set; } = []; public PlatformScreenViewModel(ITimeService timeService, ISettingsService settingsService) : base(timeService, settingsService) { - _timeService = timeService; - timeService.RefreshSecondsElapsed += RefreshDisplay; - Initialize(); - } - private async void Initialize() - { - await WaitForDataLoadAsync(); - Text = ThisPlatform; - RefreshDisplay(null,null); - } - private void RefreshDisplay(object? sender, EventArgs e) - { - Application.Current.Dispatcher.Invoke(() => - { - Screen.Add(TrainInfo.Count > 0 ? TrainInfo[0] : new()); - if (Screen.Count == 1) return; - Screen.RemoveAt(0); - }); - } - public override void RefreshData(object? sender, EventArgs e) - { - if (CurrentPageIndex == 0) - { - List itemsToRemove = []; - foreach (TrainInfo trainInfo in TrainInfo) - { - if (trainInfo.DepartureTime == null) - { - if (trainInfo.ArrivalTime.Value.Add(_settings.StopDisplayFromArrivalDuration) < _timeService.GetDateTimeNow()) - { - itemsToRemove.Add(trainInfo); - } - } - else - { - if (trainInfo.DepartureTime.Value < _timeService.GetDateTimeNow()) - { - itemsToRemove.Add(trainInfo); - } - } - } - foreach (var item in itemsToRemove) - { - TrainInfo.Remove(item); - } - } + ItemsPerPage = 1; } } } diff --git a/CRSim.ScreenSimulator/ViewModels/Zibo/ConcourseBridgeScreenViewModel.cs b/CRSim.ScreenSimulator/ViewModels/Zibo/ConcourseBridgeScreenViewModel.cs index 66d16ef..809dd8d 100644 --- a/CRSim.ScreenSimulator/ViewModels/Zibo/ConcourseBridgeScreenViewModel.cs +++ b/CRSim.ScreenSimulator/ViewModels/Zibo/ConcourseBridgeScreenViewModel.cs @@ -1,36 +1,14 @@ using CRSim.Core.Models; using CRSim.Core.Services; -using CRSim.ScreenSimulator.Models; -using System.Collections.ObjectModel; -using System.Windows; namespace CRSim.ScreenSimulator.ViewModels.Zibo { public class ConcourseBridgeScreenViewModel : ScreenViewModel { - public ObservableCollection Screen { get; set; } = []; public ConcourseBridgeScreenViewModel(ITimeService timeService, ISettingsService settingsService) : base(timeService, settingsService) { StationType = StationType.Departure; - timeService.RefreshSecondsElapsed += RefreshDisplay; - Initialize(); - } - private async void Initialize() - { ItemsPerPage = 2; - await WaitForDataLoadAsync(); - RefreshDisplay(null,null); - } - private void RefreshDisplay(object? sender, EventArgs e) - { - Application.Current.Dispatcher.Invoke(() => - { - Screen.Clear(); - for (int i = 0; i < ItemsPerPage; i++) - { - Screen.Add(TrainInfo.Count > i ? TrainInfo[i] : new()); - } - }); } } } diff --git a/CRSim.ScreenSimulator/ViewModels/Zibo/PlatformScreenViewModel.cs b/CRSim.ScreenSimulator/ViewModels/Zibo/PlatformScreenViewModel.cs index 4369b11..49b910b 100644 --- a/CRSim.ScreenSimulator/ViewModels/Zibo/PlatformScreenViewModel.cs +++ b/CRSim.ScreenSimulator/ViewModels/Zibo/PlatformScreenViewModel.cs @@ -1,62 +1,13 @@ using CRSim.Core.Services; -using CRSim.ScreenSimulator.Models; -using System.Collections.ObjectModel; -using System.Windows; namespace CRSim.ScreenSimulator.ViewModels.Zibo { public class PlatformScreenViewModel : ScreenViewModel { - private ITimeService _timeService; - public ObservableCollection Screen { get; set; } = []; public PlatformScreenViewModel(ITimeService timeService, ISettingsService settingsService) : base(timeService, settingsService) { - _timeService = timeService; - timeService.RefreshSecondsElapsed += RefreshDisplay; Text = $"请站在白色安全线以内排队候车"; - Initialize(); - } - private async void Initialize() - { - await WaitForDataLoadAsync(); - RefreshDisplay(null,null); - } - private void RefreshDisplay(object? sender, EventArgs e) - { - Application.Current.Dispatcher.Invoke(() => - { - Screen.Add(TrainInfo.Count > 0 ? TrainInfo[0] : new()); - if (Screen.Count == 1) return; - Screen.RemoveAt(0); - }); - } - public override void RefreshData(object? sender, EventArgs e) - { - if (CurrentPageIndex == 0) - { - List itemsToRemove = []; - foreach (TrainInfo trainInfo in TrainInfo) - { - if (trainInfo.DepartureTime == null) - { - if (trainInfo.ArrivalTime.Value.Add(_settings.StopDisplayFromArrivalDuration) < _timeService.GetDateTimeNow()) - { - itemsToRemove.Add(trainInfo); - } - } - else - { - if (trainInfo.DepartureTime.Value < _timeService.GetDateTimeNow()) - { - itemsToRemove.Add(trainInfo); - } - } - } - foreach (var item in itemsToRemove) - { - TrainInfo.Remove(item); - } - } + ItemsPerPage = 1; } } } diff --git a/CRSim.ScreenSimulator/ViewModels/Zibo/PrimaryScreenViewModel.cs b/CRSim.ScreenSimulator/ViewModels/Zibo/PrimaryScreenViewModel.cs index 091c66c..4105581 100644 --- a/CRSim.ScreenSimulator/ViewModels/Zibo/PrimaryScreenViewModel.cs +++ b/CRSim.ScreenSimulator/ViewModels/Zibo/PrimaryScreenViewModel.cs @@ -1,56 +1,15 @@ using CRSim.Core.Models; using CRSim.Core.Services; -using CRSim.ScreenSimulator.Models; -using System.Collections.ObjectModel; -using System.Windows; namespace CRSim.ScreenSimulator.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; StationType = StationType.Departure; - 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; - }); } } } diff --git a/CRSim.ScreenSimulator/ViewModels/Zibo/SecondaryScreenViewModel.cs b/CRSim.ScreenSimulator/ViewModels/Zibo/SecondaryScreenViewModel.cs index 410ae2c..c6181a8 100644 --- a/CRSim.ScreenSimulator/ViewModels/Zibo/SecondaryScreenViewModel.cs +++ b/CRSim.ScreenSimulator/ViewModels/Zibo/SecondaryScreenViewModel.cs @@ -1,13 +1,9 @@ using CRSim.Core.Models; using CRSim.Core.Services; -using CRSim.ScreenSimulator.Models; -using System.Windows; -using System.Collections.ObjectModel; namespace CRSim.ScreenSimulator.ViewModels.Zibo { public class SecondaryScreenViewModel : ScreenViewModel { - public ObservableCollection Screen { get; private set; } = []; public SecondaryScreenViewModel(ITimeService timeService, ISettingsService settingsService) : base(timeService, settingsService) { @@ -15,32 +11,6 @@ namespace CRSim.ScreenSimulator.ViewModels.Zibo ItemsPerPage = 18; PageCount = 1; StationType = StationType.Departure; - 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)); - Screen.Clear(); - int startIndex = CurrentPageIndex * ItemsPerPage * PageCount; - var Items = TrainInfo.Skip(startIndex).Take(ItemsPerPage).ToList(); - while (Items.Count < ItemsPerPage) // Fill up with new object() if not enough items - { - Items.Add(new TrainInfo()); - } - foreach (var item in Items) - { - Screen.Add(item); - } - CurrentPageIndex = CurrentPageIndex + 1 >= Math.Min(_settings.MaxPages, pageCount) ? 0 : CurrentPageIndex + 1; - }); } } } diff --git a/CRSim.ScreenSimulator/ViewModels/Zibo/TicketCheckScreenViewModel.cs b/CRSim.ScreenSimulator/ViewModels/Zibo/TicketCheckScreenViewModel.cs index 6f69749..250fe9c 100644 --- a/CRSim.ScreenSimulator/ViewModels/Zibo/TicketCheckScreenViewModel.cs +++ b/CRSim.ScreenSimulator/ViewModels/Zibo/TicketCheckScreenViewModel.cs @@ -1,38 +1,28 @@ using CRSim.Core.Models; using CRSim.Core.Services; using CRSim.ScreenSimulator.Models; -using System.Collections.ObjectModel; using System.Windows; namespace CRSim.ScreenSimulator.ViewModels.Zibo { public class TicketCheckScreenViewModel : ScreenViewModel { - public ObservableCollection LeftScreen { get; private set; } = []; - public ObservableCollection RightScreen { get; private set; } = []; public TicketCheckScreenViewModel(ITimeService timeService, ISettingsService settingsService) : base(timeService, settingsService) { Text = $" 开车前{settingsService.GetSettings().StopCheckInAdvanceDuration.TotalMinutes}分钟停止检票"; StationType = StationType.Departure; - timeService.RefreshSecondsElapsed += RefreshDisplay; - Initialize(); - } - private async void Initialize() - { ItemsPerPage = 5; PageCount = 2; - await WaitForDataLoadAsync(); - RefreshDisplay(null,null); } - private void RefreshDisplay(object? sender, EventArgs? e) + public override void RefreshDisplay(object? sender, EventArgs? e) { Application.Current.Dispatcher.Invoke(() => { - int pageCount = (int)Math.Ceiling((double)TrainInfo.Count / (ItemsPerPage * PageCount)); + int pageCount = (int)Math.Ceiling((double)TrainInfo.Count / (ItemsPerPage * PageCount.Value)); LeftScreen.Clear(); RightScreen.Clear(); - int startIndex = CurrentPageIndex * ItemsPerPage * PageCount; - var ItemsToShow = TrainInfo.Skip(startIndex).Take(ItemsPerPage * PageCount).ToList(); + int startIndex = CurrentPageIndex * ItemsPerPage * PageCount.Value; + var ItemsToShow = TrainInfo.Skip(startIndex).Take(ItemsPerPage * PageCount.Value).ToList(); var leftItems = ItemsToShow.Where((item, index) => index % 2 == 0).ToList(); var rightItems = ItemsToShow.Where((item, index) => index % 2 == 1).ToList(); while (leftItems.Count < ItemsPerPage) diff --git a/CRSim.ScreenSimulator/Views/Beijing/ArrivalScreenView.xaml b/CRSim.ScreenSimulator/Views/Beijing/ArrivalScreenView.xaml index 071b2fe..813d9b2 100644 --- a/CRSim.ScreenSimulator/Views/Beijing/ArrivalScreenView.xaml +++ b/CRSim.ScreenSimulator/Views/Beijing/ArrivalScreenView.xaml @@ -41,7 +41,7 @@ - - - - + - + - + - + - + diff --git a/CRSim.ScreenSimulator/Views/Fuzhou/TicketCheckScreenView.xaml b/CRSim.ScreenSimulator/Views/Fuzhou/TicketCheckScreenView.xaml index e695a27..c585fca 100644 --- a/CRSim.ScreenSimulator/Views/Fuzhou/TicketCheckScreenView.xaml +++ b/CRSim.ScreenSimulator/Views/Fuzhou/TicketCheckScreenView.xaml @@ -45,7 +45,7 @@ - - - - - + - + @@ -51,7 +51,7 @@ - + @@ -70,7 +70,7 @@ - + diff --git a/CRSim.ScreenSimulator/Views/HarbinXi/PlatformScreenView.xaml b/CRSim.ScreenSimulator/Views/HarbinXi/PlatformScreenView.xaml index 30d7a46..af57ac1 100644 --- a/CRSim.ScreenSimulator/Views/HarbinXi/PlatformScreenView.xaml +++ b/CRSim.ScreenSimulator/Views/HarbinXi/PlatformScreenView.xaml @@ -39,18 +39,18 @@ - + - + - + - + - + diff --git a/CRSim.ScreenSimulator/Views/Jinanxi/SmallScreenView.xaml b/CRSim.ScreenSimulator/Views/Jinanxi/SmallScreenView.xaml index a4bb6c9..e987b97 100644 --- a/CRSim.ScreenSimulator/Views/Jinanxi/SmallScreenView.xaml +++ b/CRSim.ScreenSimulator/Views/Jinanxi/SmallScreenView.xaml @@ -107,7 +107,7 @@ - - + - - + + @@ -57,11 +57,11 @@ - + - + - + @@ -72,7 +72,7 @@ - + diff --git a/CRSim.ScreenSimulator/Views/Shanghai/OutsideScreenView.xaml b/CRSim.ScreenSimulator/Views/Shanghai/OutsideScreenView.xaml index a5ea3cc..818e614 100644 --- a/CRSim.ScreenSimulator/Views/Shanghai/OutsideScreenView.xaml +++ b/CRSim.ScreenSimulator/Views/Shanghai/OutsideScreenView.xaml @@ -25,7 +25,7 @@ - - + @@ -50,7 +50,7 @@ - + @@ -60,7 +60,7 @@ - + @@ -77,13 +77,13 @@ - + - + diff --git a/CRSim.ScreenSimulator/Views/Zibo/ConcourseBridgeScreenView.xaml b/CRSim.ScreenSimulator/Views/Zibo/ConcourseBridgeScreenView.xaml index d6ff0c0..82c66ff 100644 --- a/CRSim.ScreenSimulator/Views/Zibo/ConcourseBridgeScreenView.xaml +++ b/CRSim.ScreenSimulator/Views/Zibo/ConcourseBridgeScreenView.xaml @@ -45,7 +45,7 @@ - - + - + - + @@ -66,9 +66,9 @@ - + - + @@ -89,7 +89,7 @@ - + diff --git a/CRSim.ScreenSimulator/Views/Zibo/SecondaryScreenView.xaml b/CRSim.ScreenSimulator/Views/Zibo/SecondaryScreenView.xaml index 5011cd8..c38e8ee 100644 --- a/CRSim.ScreenSimulator/Views/Zibo/SecondaryScreenView.xaml +++ b/CRSim.ScreenSimulator/Views/Zibo/SecondaryScreenView.xaml @@ -58,7 +58,7 @@ -