mirror of
https://github.com/denglihong2007/CRSim
synced 2026-08-08 10:45:35 +08:00
refactor: #154 为样式的ViewModel构建基类以减少重复代码
This commit is contained in:
@@ -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<TrainInfo> LeftScreen { get; private set; } = [];
|
||||
public ObservableCollection<TrainInfo> 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<TrainInfo> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<TrainInfo> 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<TrainInfo> 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<TrainInfo> LeftScreen { get; private set; } = [];
|
||||
public ObservableCollection<TrainInfo> 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;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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(() =>
|
||||
{
|
||||
|
||||
@@ -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<TrainInfo> 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<TrainInfo> LeftScreen { get; private set; } = [];
|
||||
public ObservableCollection<TrainInfo> 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;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<TrainInfo> 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());
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<TrainInfo> 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<TrainInfo> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<TrainInfo> 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<TrainInfo> 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<TrainInfo> 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;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<TrainInfo> 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;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<TrainInfo> 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<TrainInfo> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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<TrainInfo> LeftScreen { get; private set; } = [];
|
||||
public ObservableCollection<TrainInfo> 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;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<TrainInfo> 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<TrainInfo> 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<TrainInfo> 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;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<TrainInfo> 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<TrainInfo> 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<TrainInfo> 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;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<bool> _dataLoaded = new();
|
||||
public readonly TaskCompletionSource<bool> 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<TrainInfo> LeftScreen { get; private set; } = [];
|
||||
public ObservableCollection<TrainInfo> RightScreen { get; private set; } = [];
|
||||
|
||||
public List<TrainInfo> 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)
|
||||
//<summary>
|
||||
// 适用于翻页屏的屏幕个数参数,非翻页屏请不要设置。
|
||||
//</summary>
|
||||
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<TrainInfo> 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;
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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<TrainInfo> 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;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<TrainInfo> 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<TrainInfo> 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<TrainInfo> 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());
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<TrainInfo> 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<TrainInfo> 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<TrainInfo> LeftScreen { get; private set; } = [];
|
||||
public ObservableCollection<TrainInfo> 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;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<TrainInfo> 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;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<TrainInfo> LeftScreen { get; private set; } = [];
|
||||
public ObservableCollection<TrainInfo> 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)
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
<StackPanel Orientation="Vertical">
|
||||
<DataGrid ItemsSource="{Binding Screen}" AutoGenerateColumns="False" BorderThickness="0"
|
||||
<DataGrid ItemsSource="{Binding LeftScreen}" AutoGenerateColumns="False" BorderThickness="0"
|
||||
CanUserResizeColumns="False" CanUserSortColumns="False" CanUserAddRows="False"
|
||||
CanUserResizeRows="False" CanUserReorderColumns="False"
|
||||
IsReadOnly="True" GridLinesVisibility="None" RowHeight="34" Foreground="White"
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
<converters1:DateTimeToStringConverter x:Key="DateTimeToStringConverter" Format="HH:mm" />
|
||||
</Window.Resources>
|
||||
<StackPanel Orientation="Vertical">
|
||||
<DataGrid ItemsSource="{Binding Screen}" AutoGenerateColumns="False"
|
||||
<DataGrid ItemsSource="{Binding LeftScreen}" AutoGenerateColumns="False"
|
||||
CanUserResizeColumns="False" CanUserSortColumns="False" CanUserAddRows="False"
|
||||
CanUserResizeRows="False" CanUserReorderColumns="False" ClipToBounds="False"
|
||||
IsReadOnly="True" GridLinesVisibility="None" RowHeight="28" Foreground="White"
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
<StackPanel Orientation="Vertical">
|
||||
<DataGrid ItemsSource="{Binding Screen}" AutoGenerateColumns="False" BorderThickness="0"
|
||||
<DataGrid ItemsSource="{Binding LeftScreen}" AutoGenerateColumns="False" BorderThickness="0"
|
||||
CanUserResizeColumns="False" CanUserSortColumns="False" CanUserAddRows="False"
|
||||
CanUserResizeRows="False" CanUserReorderColumns="False" ClipToBounds="False"
|
||||
IsReadOnly="True" GridLinesVisibility="None" RowHeight="34" Foreground="White"
|
||||
|
||||
@@ -36,20 +36,20 @@
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Grid.Column="0" Grid.Row="0" Text="{Binding Screen[0].TrainNumber}" VerticalAlignment="Center" TextAlignment="Left"/>
|
||||
<TextBlock Grid.Column="0" Grid.Row="0" Text="{Binding LeftScreen[0].TrainNumber}" VerticalAlignment="Center" TextAlignment="Left"/>
|
||||
<TextBlock Grid.Column="1" Grid.Row="0" Text="次" Margin="4,0,0,0" VerticalAlignment="Center" TextAlignment="Left"/>
|
||||
<TextBlock Grid.Column="3" Grid.Row="0" Text="本站" Foreground="#de502b" VerticalAlignment="Center" TextAlignment="Center"/>
|
||||
<TextBlock Grid.Column="5" Grid.Row="0" Text="{Binding Screen[0].DepartureTime,Converter={StaticResource DateTimeToStringConverter}}" VerticalAlignment="Center" TextAlignment="Right"/>
|
||||
<TextBlock Grid.Column="5" Grid.Row="0" Text="{Binding LeftScreen[0].DepartureTime,Converter={StaticResource DateTimeToStringConverter}}" VerticalAlignment="Center" TextAlignment="Right"/>
|
||||
<TextBlock Grid.Column="6" Grid.Row="0" Text="开" Margin="4,0,0,0" VerticalAlignment="Center" TextAlignment="Right"/>
|
||||
|
||||
<TextBlock Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="1" Text="{Binding Screen[0].Origin}" VerticalAlignment="Center" TextAlignment="Left"/>
|
||||
<TextBlock Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="1" Text="{Binding LeftScreen[0].Origin}" VerticalAlignment="Center" TextAlignment="Left"/>
|
||||
<TextBlock Grid.Column="3" Grid.Row="1" Text="开往" Foreground="#de502b" VerticalAlignment="Center" TextAlignment="Center"/>
|
||||
<TextBlock Grid.Column="5" Grid.ColumnSpan="2" Grid.Row="1" Text="{Binding Screen[0].Terminal}" VerticalAlignment="Center" TextAlignment="Right"/>
|
||||
<TextBlock Grid.Column="5" Grid.ColumnSpan="2" Grid.Row="1" Text="{Binding LeftScreen[0].Terminal}" VerticalAlignment="Center" TextAlignment="Right"/>
|
||||
|
||||
<pp:RunningText Speed="20" Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="7">
|
||||
<pp:RunningText.Text>
|
||||
<MultiBinding Mode="OneWay" Converter="{StaticResource LocationToStringConverter}">
|
||||
<Binding Path="Screen[0].Length" />
|
||||
<Binding Path="LeftScreen[0].Length" />
|
||||
<Binding Path="Location" />
|
||||
</MultiBinding>
|
||||
</pp:RunningText.Text>
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
<StackPanel Orientation="Vertical">
|
||||
<DataGrid ItemsSource="{Binding Screen}" AutoGenerateColumns="False" BorderThickness="0.1"
|
||||
<DataGrid ItemsSource="{Binding LeftScreen}" AutoGenerateColumns="False" BorderThickness="0.1"
|
||||
CanUserResizeColumns="False" CanUserSortColumns="False" CanUserAddRows="False"
|
||||
CanUserResizeRows="False" CanUserReorderColumns="False" ClipToBounds="False"
|
||||
IsReadOnly="True" GridLinesVisibility="None" RowHeight="28" Foreground="White"
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
<StackPanel Orientation="Vertical">
|
||||
<DataGrid ItemsSource="{Binding Screen}" AutoGenerateColumns="False" BorderThickness="0.1"
|
||||
<DataGrid ItemsSource="{Binding LeftScreen}" AutoGenerateColumns="False" BorderThickness="0.1"
|
||||
CanUserResizeColumns="False" CanUserSortColumns="False" CanUserAddRows="False"
|
||||
CanUserResizeRows="False" CanUserReorderColumns="False" ClipToBounds="False"
|
||||
IsReadOnly="True" GridLinesVisibility="None" RowHeight="28" Foreground="White"
|
||||
|
||||
@@ -94,7 +94,7 @@
|
||||
</Grid>
|
||||
</Grid>
|
||||
|
||||
<DataGrid ItemsSource="{Binding Screen, Mode=OneWay}" AutoGenerateColumns="False"
|
||||
<DataGrid ItemsSource="{Binding LeftScreen, Mode=OneWay}" AutoGenerateColumns="False"
|
||||
CanUserResizeColumns="False" CanUserSortColumns="False" CanUserAddRows="False"
|
||||
CanUserResizeRows="False" CanUserReorderColumns="False"
|
||||
IsReadOnly="True" GridLinesVisibility="None" RowHeight="35"
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
<converters:TrainStateConverter x:Key="TrainStateConverter" WaitingText="正点"/>
|
||||
</Window.Resources>
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<DataGrid ItemsSource="{Binding Screen}" AutoGenerateColumns="False"
|
||||
<DataGrid ItemsSource="{Binding LeftScreen}" AutoGenerateColumns="False"
|
||||
CanUserResizeColumns="False" CanUserSortColumns="False" CanUserAddRows="False"
|
||||
CanUserResizeRows="False" CanUserReorderColumns="False"
|
||||
IsReadOnly="True" GridLinesVisibility="None" RowHeight="28" Foreground="#D75B41"
|
||||
|
||||
@@ -35,11 +35,11 @@
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Grid.Column="0" Foreground="#0089FF" Text="{Binding Screen[0].DepartureTime,Converter={StaticResource DateTimeToStringConverter}}" FontSize="32" Margin="64,0,0,0" FontWeight="Bold"/>
|
||||
<TextBlock Grid.Column="0" Foreground="#0089FF" Text="{Binding LeftScreen[0].DepartureTime,Converter={StaticResource DateTimeToStringConverter}}" FontSize="32" Margin="64,0,0,0" FontWeight="Bold"/>
|
||||
<TextBlock Grid.Column="1" Foreground="#0089FF" Text="开" FontSize="32" Margin="4,0,8,0" FontWeight="Bold"/>
|
||||
<Image Grid.Column="2" Source="pack://application:,,,/CRSim.ScreenSimulator;component/Assets/Hanzhong/Image.png" Height="{Binding ActualHeight,ElementName=Panel}"/>
|
||||
<Rectangle Grid.Column="3" Fill="#0089FF" Height="{Binding ActualHeight,ElementName=Panel}"/>
|
||||
<TextBlock Grid.Column="4" Text="{Binding Screen[0].TrainNumber}" Foreground="#FE5649" Background="#0089FF" FontSize="32" FontWeight="Bold"/>
|
||||
<TextBlock Grid.Column="4" Text="{Binding LeftScreen[0].TrainNumber}" Foreground="#FE5649" Background="#0089FF" FontSize="32" FontWeight="Bold"/>
|
||||
<Rectangle Grid.Column="5" Fill="#0089FF" Height="{Binding ActualHeight,ElementName=Panel}" Width="8"/>
|
||||
<TextBlock Grid.Column="6" Text="次" Foreground="#FE5649" Background="#0089FF" FontSize="32" FontWeight="Bold"/>
|
||||
<Rectangle Grid.Column="7" Fill="#0089FF" Height="{Binding ActualHeight,ElementName=Panel}" Width="52"/>
|
||||
@@ -51,7 +51,7 @@
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="1*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Grid.Column="0" TextAlignment="Center" Text="{Binding Screen[0].Origin}" FontSize="36" Foreground="#09F2F6" FontWeight="Bold"/>
|
||||
<TextBlock Grid.Column="0" TextAlignment="Center" Text="{Binding LeftScreen[0].Origin}" FontSize="36" Foreground="#09F2F6" FontWeight="Bold"/>
|
||||
<Grid Grid.Column="1">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="*"/>
|
||||
@@ -70,7 +70,7 @@
|
||||
<Polygon Points="0,0 0,10 8.66,5" Fill="#FDB441" Margin="2.5"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
<TextBlock Grid.Column="2" TextAlignment="Center" Text="{Binding Screen[0].Terminal}" FontSize="36" Foreground="#09F2F6" FontWeight="Bold"/>
|
||||
<TextBlock Grid.Column="2" TextAlignment="Center" Text="{Binding LeftScreen[0].Terminal}" FontSize="36" Foreground="#09F2F6" FontWeight="Bold"/>
|
||||
</Grid>
|
||||
<TextBlock Grid.Row="2" TextAlignment="Center" Foreground="White" Text="{Binding Text}" Margin="0,5"/>
|
||||
</Grid>
|
||||
|
||||
@@ -39,18 +39,18 @@
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="*"/>
|
||||
</Grid.RowDefinitions>
|
||||
<TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding Screen[0].TrainNumber}" VerticalAlignment="Center" TextAlignment="Center"/>
|
||||
<TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding LeftScreen[0].TrainNumber}" VerticalAlignment="Center" TextAlignment="Center"/>
|
||||
<TextBlock Grid.Row="0" Grid.Column="2" Text="次" Margin="4,0,0,0" VerticalAlignment="Center" TextAlignment="Center"/>
|
||||
<TextBlock Grid.Row="0" Grid.Column="4" Text="本站" Foreground="#de502b" VerticalAlignment="Center" TextAlignment="Center"/>
|
||||
<TextBlock Grid.Row="0" Grid.Column="6" Text="{Binding Screen[0].DepartureTime,Converter={StaticResource DateTimeToStringConverter}}" VerticalAlignment="Center" TextAlignment="Center"/>
|
||||
<TextBlock Grid.Row="0" Grid.Column="6" Text="{Binding LeftScreen[0].DepartureTime,Converter={StaticResource DateTimeToStringConverter}}" VerticalAlignment="Center" TextAlignment="Center"/>
|
||||
<TextBlock Grid.Row="0" Grid.Column="7" Text="开" Margin="4,0,0,0" VerticalAlignment="Center" TextAlignment="Center"/>
|
||||
<TextBlock Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2" Text="{Binding Screen[0].Origin}" VerticalAlignment="Center" TextAlignment="Center"/>
|
||||
<TextBlock Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2" Text="{Binding LeftScreen[0].Origin}" VerticalAlignment="Center" TextAlignment="Center"/>
|
||||
<TextBlock Grid.Row="1" Grid.Column="4" Text="开往" Foreground="#de502b" VerticalAlignment="Center" TextAlignment="Center"/>
|
||||
<TextBlock Grid.Row="1" Grid.Column="6" Grid.ColumnSpan="2" Text="{Binding Screen[0].Terminal}" VerticalAlignment="Center" TextAlignment="Center"/>
|
||||
<TextBlock Grid.Row="1" Grid.Column="6" Grid.ColumnSpan="2" Text="{Binding LeftScreen[0].Terminal}" VerticalAlignment="Center" TextAlignment="Center"/>
|
||||
<pp:RunningText Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="9" Speed="20">
|
||||
<pp:RunningText.Text>
|
||||
<MultiBinding Mode="OneWay" Converter="{StaticResource LocationToStringConverter}">
|
||||
<Binding Path="Screen[0].Length" />
|
||||
<Binding Path="LeftScreen[0].Length" />
|
||||
<Binding Path="Location" />
|
||||
</MultiBinding>
|
||||
</pp:RunningText.Text>
|
||||
|
||||
@@ -107,7 +107,7 @@
|
||||
</Canvas>
|
||||
</Grid>
|
||||
|
||||
<DataGrid ItemsSource="{Binding Screen, Mode=OneWay}" AutoGenerateColumns="False"
|
||||
<DataGrid ItemsSource="{Binding LeftScreen, Mode=OneWay}" AutoGenerateColumns="False"
|
||||
CanUserResizeColumns="False" CanUserSortColumns="False" CanUserAddRows="False"
|
||||
CanUserResizeRows="False" CanUserReorderColumns="False"
|
||||
IsReadOnly="True" GridLinesVisibility="None" RowHeight="28"
|
||||
|
||||
@@ -40,11 +40,11 @@
|
||||
</Grid.ColumnDefinitions>
|
||||
<StackPanel Grid.Column="0" Orientation="Horizontal">
|
||||
<TextBlock Text="←" Foreground="LightYellow" Margin="4,0,0,0" FontFamily="黑体"/>
|
||||
<TextBlock Text="{Binding Screen[0].TrainNumber}" Foreground="LightYellow" Margin="40,0,0,0"/>
|
||||
<TextBlock Text="{Binding LeftScreen[0].TrainNumber}" Foreground="LightYellow" Margin="40,0,0,0"/>
|
||||
<TextBlock Text="次" Foreground="LightYellow" Margin="25,0,0,0"/>
|
||||
</StackPanel>
|
||||
<TextBlock Grid.Column="2" Visibility="{Binding Screen[0].Landmark,Converter={StaticResource EmptyToVisibilityConverter}}" Text="{Binding Screen[0].Landmark}" Foreground="Red" FontWeight="Bold"/>
|
||||
<TextBlock Grid.Column="3" Visibility="{Binding Screen[0].Landmark,Converter={StaticResource EmptyToVisibilityConverter}}" Text="地标" Foreground="Red" FontWeight="Bold"/>
|
||||
<TextBlock Grid.Column="2" Visibility="{Binding LeftScreen[0].Landmark,Converter={StaticResource EmptyToVisibilityConverter}}" Text="{Binding LeftScreen[0].Landmark}" Foreground="Red" FontWeight="Bold"/>
|
||||
<TextBlock Grid.Column="3" Visibility="{Binding LeftScreen[0].Landmark,Converter={StaticResource EmptyToVisibilityConverter}}" Text="地标" Foreground="Red" FontWeight="Bold"/>
|
||||
</Grid>
|
||||
<Grid Grid.Row="1" Margin="0,10">
|
||||
<Grid.ColumnDefinitions>
|
||||
@@ -57,11 +57,11 @@
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Grid.Column="0" Text="{Binding Screen[0].DepartureTime,Converter={StaticResource DateTimeToStringConverter}}" Foreground="LawnGreen" FontSize="25"/>
|
||||
<TextBlock Grid.Column="0" Text="{Binding LeftScreen[0].DepartureTime,Converter={StaticResource DateTimeToStringConverter}}" Foreground="LawnGreen" FontSize="25"/>
|
||||
<TextBlock Grid.Column="1" Text="开" Foreground="LawnGreen" FontSize="25" Margin="5,0,0,0"/>
|
||||
<TextBlock Grid.Column="3" Text="{Binding Screen[0].Origin}" Foreground="LawnGreen" FontSize="25"/>
|
||||
<TextBlock Grid.Column="3" Text="{Binding LeftScreen[0].Origin}" Foreground="LawnGreen" FontSize="25"/>
|
||||
<TextBlock Grid.Column="5" Text="开往" Foreground="LawnGreen" FontSize="25"/>
|
||||
<TextBlock Grid.Column="7" Text="{Binding Screen[0].Terminal}" Foreground="LawnGreen" FontSize="25" Margin="0,0,4,0"/>
|
||||
<TextBlock Grid.Column="7" Text="{Binding LeftScreen[0].Terminal}" Foreground="LawnGreen" FontSize="25" Margin="0,0,4,0"/>
|
||||
</Grid>
|
||||
<Grid Grid.Row="2">
|
||||
<Grid.ColumnDefinitions>
|
||||
@@ -72,7 +72,7 @@
|
||||
<pp:RunningText Speed="20" Width="265" Grid.Column="0" FontSize="25" Foreground="LightYellow">
|
||||
<pp:RunningText.Text>
|
||||
<MultiBinding Mode="OneWay" Converter="{StaticResource LocationToStringConverter}">
|
||||
<Binding Path="Screen[0].Length" />
|
||||
<Binding Path="LeftScreen[0].Length" />
|
||||
<Binding Path="Location" />
|
||||
</MultiBinding>
|
||||
</pp:RunningText.Text>
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
<converters:TrainStateConverter x:Key="TrainStateConverter" WaitingText="候 车" CheckInText="检 票" StopCheckInText="停 检"/>
|
||||
<converters:TrainStateColorConverter x:Key="TrainStateColorConverter" WaitingColor="LightYellow"/>
|
||||
</Window.Resources>
|
||||
<DataGrid ItemsSource="{Binding Screen}" AutoGenerateColumns="False"
|
||||
<DataGrid ItemsSource="{Binding LeftScreen}" AutoGenerateColumns="False"
|
||||
CanUserResizeColumns="False" CanUserSortColumns="False" CanUserAddRows="False"
|
||||
CanUserResizeRows="False" CanUserReorderColumns="False" ClipToBounds="False"
|
||||
IsReadOnly="True" GridLinesVisibility="None" RowHeight="28" Foreground="LightYellow"
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
</Grid.ColumnDefinitions>
|
||||
<Border Grid.Column="0" CornerRadius="4,0,0,4" Background="#830DFF">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBlock Text="{Binding Screen[0].TrainNumber}" Foreground="White" VerticalAlignment="Center" Margin="8,0,0,0"/>
|
||||
<TextBlock Text="{Binding LeftScreen[0].TrainNumber}" Foreground="White" VerticalAlignment="Center" Margin="8,0,0,0"/>
|
||||
<TextBlock Text="次" Foreground="White" VerticalAlignment="Center" Margin="20,0"/>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
@@ -50,7 +50,7 @@
|
||||
<Border Grid.Column="2" CornerRadius="0,4,4,0" Background="Yellow" x:Name="Panel">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<Image Grid.Column="0" Source="pack://application:,,,/CRSim.ScreenSimulator;component/Assets/Tianjin/Image.png" Height="{Binding ActualHeight,ElementName=Panel}"/>
|
||||
<TextBlock Grid.Column="1" Text="{Binding Screen[0].DepartureTime,Converter={StaticResource DateTimeToStringConverter}}" Foreground="Black" VerticalAlignment="Center" Padding="12,0,64,0"/>
|
||||
<TextBlock Grid.Column="1" Text="{Binding LeftScreen[0].DepartureTime,Converter={StaticResource DateTimeToStringConverter}}" Foreground="Black" VerticalAlignment="Center" Padding="12,0,64,0"/>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</Grid>
|
||||
@@ -60,7 +60,7 @@
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="1*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Grid.Column="0" TextAlignment="Center" Text="{Binding Screen[0].Origin}" FontSize="32" Foreground="White" FontWeight="Bold"/>
|
||||
<TextBlock Grid.Column="0" TextAlignment="Center" Text="{Binding LeftScreen[0].Origin}" FontSize="32" Foreground="White" FontWeight="Bold"/>
|
||||
<Grid Grid.Column="1">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="*"/>
|
||||
@@ -77,13 +77,13 @@
|
||||
<Polygon Grid.Column="1" Points="0,0 0,8 8.66,4" Fill="White" Margin="0"/>
|
||||
</Grid>
|
||||
</Grid>
|
||||
<TextBlock Grid.Column="2" TextAlignment="Center" Text="{Binding Screen[0].Terminal}" FontSize="32" Foreground="White" FontWeight="Bold"/>
|
||||
<TextBlock Grid.Column="2" TextAlignment="Center" Text="{Binding LeftScreen[0].Terminal}" FontSize="32" Foreground="White" FontWeight="Bold"/>
|
||||
</Grid>
|
||||
<Border Grid.Row="3" CornerRadius="8" Background="#830DFF">
|
||||
<TextBlock TextAlignment="Center" Foreground="White" FontSize="20" Padding="2">
|
||||
<TextBlock.Text>
|
||||
<MultiBinding Mode="OneWay" Converter="{StaticResource LocationToStringConverter}">
|
||||
<Binding Path="Screen[0].Length" />
|
||||
<Binding Path="LeftScreen[0].Length" />
|
||||
<Binding Path="Location" />
|
||||
</MultiBinding>
|
||||
</TextBlock.Text>
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
<StackPanel Orientation="Vertical">
|
||||
<DataGrid ItemsSource="{Binding Screen}" AutoGenerateColumns="False" BorderThickness="0"
|
||||
<DataGrid ItemsSource="{Binding LeftScreen}" AutoGenerateColumns="False" BorderThickness="0"
|
||||
CanUserResizeColumns="False" CanUserSortColumns="False" CanUserAddRows="False"
|
||||
CanUserResizeRows="False" CanUserReorderColumns="False" ClipToBounds="False"
|
||||
IsReadOnly="True" GridLinesVisibility="None" RowHeight="34" Foreground="White"
|
||||
|
||||
@@ -46,11 +46,11 @@
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Grid.Column="0" Text="{Binding Screen[0].TrainNumber}" Foreground="#ffffff" Margin="15,0,0,0" FontSize="18" />
|
||||
<TextBlock Grid.Column="0" Text="{Binding LeftScreen[0].TrainNumber}" Foreground="#ffffff" Margin="15,0,0,0" FontSize="18" />
|
||||
<TextBlock Grid.Column="1" Text="次" Foreground="#ffffff" FontSize="16" Margin="20,0,0,0"/>
|
||||
<TextBlock Grid.Column="3" Text="{Binding Screen[0].ArrivalTime,Converter={StaticResource DateTimeToStringConverter}}" Foreground="#ffffff" FontSize="18"/>
|
||||
<TextBlock Grid.Column="3" Text="{Binding LeftScreen[0].ArrivalTime,Converter={StaticResource DateTimeToStringConverter}}" Foreground="#ffffff" FontSize="18"/>
|
||||
<TextBlock Grid.Column="4" Text="到" Foreground="#ffffff" FontSize="18" Margin="10,0"/>
|
||||
<TextBlock Grid.Column="5" Text="{Binding Screen[0].DepartureTime,Converter={StaticResource DateTimeToStringConverter}}" Foreground="#ffffff" FontSize="18"/>
|
||||
<TextBlock Grid.Column="5" Text="{Binding LeftScreen[0].DepartureTime,Converter={StaticResource DateTimeToStringConverter}}" Foreground="#ffffff" FontSize="18"/>
|
||||
<TextBlock Grid.Column="6" Text="开" Foreground="#ffffff" FontSize="18" Margin="10,0"/>
|
||||
</Grid>
|
||||
<Grid Grid.Row="1" Margin="0,10,0,10">
|
||||
@@ -66,9 +66,9 @@
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Grid.Column="1" Text="{Binding Screen[0].Origin}" Foreground="#ffffff" FontSize="20"/>
|
||||
<TextBlock Grid.Column="1" Text="{Binding LeftScreen[0].Origin}" Foreground="#ffffff" FontSize="20"/>
|
||||
<TextBlock Grid.Column="3" Text=" — " Foreground="#ffffff" FontSize="20"/>
|
||||
<TextBlock Grid.Column="5" Text="{Binding Screen[0].Terminal}" Foreground="#ffffff" FontSize="20"/>
|
||||
<TextBlock Grid.Column="5" Text="{Binding LeftScreen[0].Terminal}" Foreground="#ffffff" FontSize="20"/>
|
||||
<TextBlock Grid.Column="7" Text="{Binding ThisPlatform}" Foreground="#ffffff" FontSize="20"/>
|
||||
<TextBlock Grid.Column="9" Text="台" Foreground="#ffffff" FontSize="20" Margin="0,0,10,0"/>
|
||||
</Grid>
|
||||
@@ -89,7 +89,7 @@
|
||||
<TextBlock Grid.Column="1" TextAlignment="Center" Foreground="White" FontSize="18" Padding="2" Margin="0,5,0,5">
|
||||
<TextBlock.Text>
|
||||
<MultiBinding Mode="OneWay" Converter="{StaticResource LocationToStringConverter}">
|
||||
<Binding Path="Screen[0].Length" />
|
||||
<Binding Path="LeftScreen[0].Length" />
|
||||
<Binding Path="Location" />
|
||||
</MultiBinding>
|
||||
</TextBlock.Text>
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
</Window.Resources>
|
||||
<StackPanel Orientation="Vertical">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<DataGrid ItemsSource="{Binding Screen, Mode=OneWay}" AutoGenerateColumns="False"
|
||||
<DataGrid ItemsSource="{Binding LeftScreen, Mode=OneWay}" AutoGenerateColumns="False"
|
||||
CanUserResizeColumns="False" CanUserSortColumns="False" CanUserAddRows="False"
|
||||
CanUserResizeRows="False" CanUserReorderColumns="False"
|
||||
IsReadOnly="True" GridLinesVisibility="None" RowHeight="35"
|
||||
|
||||
Reference in New Issue
Block a user