From c1818a0c85dc2c1a6bd36fcde09f71fb13fcc57f Mon Sep 17 00:00:00 2001 From: "David P.G" Date: Fri, 3 Oct 2025 13:40:06 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84=E5=8E=86=E5=8F=B2=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E6=9D=A1=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ViewModels/VariableHistoryViewModel.cs | 93 ++++++++++--------- 1 file changed, 51 insertions(+), 42 deletions(-) diff --git a/DMS.WPF/ViewModels/VariableHistoryViewModel.cs b/DMS.WPF/ViewModels/VariableHistoryViewModel.cs index 996e7ec..18fa047 100644 --- a/DMS.WPF/ViewModels/VariableHistoryViewModel.cs +++ b/DMS.WPF/ViewModels/VariableHistoryViewModel.cs @@ -30,10 +30,16 @@ partial class VariableHistoryViewModel : ViewModelBase, INavigatable private readonly INotificationService _notificationService; /// - /// 历史记录条数限制 + /// 加载历史记录条数限制 /// [ObservableProperty] - private int? _historyLimit; + private int? _initHistoryLimit; + + /// + /// 显示历史记录条数限制 + /// + [ObservableProperty] + private int? _viewHistoryLimit; /// /// 历史记录开始时间 @@ -60,11 +66,11 @@ partial class VariableHistoryViewModel : ViewModelBase, INavigatable // 折线图相关属性 public ISeries[] LineSeriesCollection { get; set; } - - [ObservableProperty] + + [ObservableProperty] private Axis[] _lineAxisX; - - [ObservableProperty] + + [ObservableProperty] private Axis[] _lineAxisY; private readonly ObservableList _variableHistoryList; @@ -77,7 +83,7 @@ partial class VariableHistoryViewModel : ViewModelBase, INavigatable public VariableHistoryViewModel(IMapper mapper, IDialogService dialogService, IHistoryAppService historyAppService, IWPFDataService wpfDataService, IDataStorageService dataStorageService, - IEventService eventService, + IEventService eventService, INotificationService notificationService) { _mapper = mapper; @@ -94,10 +100,10 @@ partial class VariableHistoryViewModel : ViewModelBase, INavigatable _allVariableHistories = new List(); // 初始化默认值 - _historyLimit = 50; // 默认限制1000条记录 + _initHistoryLimit = 50; // 默认限制1000条记录 _startTime = null; _endTime = null; - + // 初始化图表属性 LineAxisX = new Axis[] { new Axis() }; LineAxisY = new Axis[] { new Axis() }; @@ -123,13 +129,13 @@ partial class VariableHistoryViewModel : ViewModelBase, INavigatable _variableHistoryList.Add(variableHistory); // 限制历史记录数量以防止内存溢出 - if (HistoryLimit.HasValue && _variableHistoryList.Count > HistoryLimit.Value) + if (ViewHistoryLimit.HasValue && _variableHistoryList.Count > ViewHistoryLimit.Value) { // 移除最旧的记录 _variableHistoryList.RemoveAt(0); } - // 更新图表数据 + // 更新图表数据 - 使用更高效的方法处理实时更新 UpdateChartData(); } @@ -147,7 +153,8 @@ partial class VariableHistoryViewModel : ViewModelBase, INavigatable _variableHistoryList.Clear(); var allHistories = await _historyAppService.GetVariableHistoriesAsync(variableId, limit, startTime, endTime); - _allVariableHistories = allHistories.ToList(); + _allVariableHistories = allHistories.OrderBy(v => v.Timestamp) + .ToList(); _variableHistoryList.AddRange(_allVariableHistories); // 更新图表数据 @@ -167,7 +174,7 @@ partial class VariableHistoryViewModel : ViewModelBase, INavigatable { CurrentVariable = variableItem; // 加载所有变量的历史记录 - LoadAllVariableHistories(variableItem.Id, HistoryLimit, StartTime, EndTime); + LoadAllVariableHistories(variableItem.Id, InitHistoryLimit, StartTime, EndTime); } } @@ -179,7 +186,7 @@ partial class VariableHistoryViewModel : ViewModelBase, INavigatable { if (CurrentVariable != null) { - LoadAllVariableHistories(CurrentVariable.Id, HistoryLimit, StartTime, EndTime); + LoadAllVariableHistories(CurrentVariable.Id, InitHistoryLimit, StartTime, EndTime); } } @@ -240,6 +247,7 @@ partial class VariableHistoryViewModel : ViewModelBase, INavigatable private Axis[] _lineAxisXInstance; private Axis[] _lineAxisYInstance; + /// /// 更新图表数据 /// @@ -258,7 +266,7 @@ partial class VariableHistoryViewModel : ViewModelBase, INavigatable { // 创建数值点集合 var values = new List(); - + foreach (var history in _variableHistoryList) { values.Add(new DateTimePoint(history.Timestamp, history.NumericValue)); @@ -266,36 +274,37 @@ partial class VariableHistoryViewModel : ViewModelBase, INavigatable // 创建线性序列 var series = new LineSeries - { - Name = CurrentVariable?.Name ?? "变量值", - Values = values, - Fill = null, - Stroke = new SolidColorPaint(new SKColor(41, 128, 185)) { StrokeThickness = 2 }, - GeometrySize = 6, // 显示数据点,圆点大小为6 - LineSmoothness = 0 // 使用直线连接点,也可以设为其他值实现曲线 - }; + { + Name = CurrentVariable?.Name ?? "变量值", + Values = values, + Fill = null, + Stroke = new SolidColorPaint(new SKColor(41, 128, 185)) { StrokeThickness = 2 }, + GeometrySize = 6, // 显示数据点,圆点大小为6 + LineSmoothness = 5 // 使用直线连接点,也可以设为其他值实现曲线 + }; // 更新序列集合 LineSeriesCollection = new ISeries[] { series }; - + // 初始化坐标轴并保存实例引用 _lineAxisXInstance = new Axis[] - { - new Axis - { - Labeler = value => new DateTime((long)value).ToString("MM-dd HH:mm:ss") - } - }; + { + new Axis + { + Labeler = value => new DateTime((long)value).ToString("MM-dd HH:mm:ss"), + // 不设置固定范围,让图表根据数据自动调整 + } + }; _lineAxisYInstance = new Axis[] - { - new Axis - { - Name = CurrentVariable?.Name ?? "值", - // MinLimit = 0 // 设置Y轴从0开始 - } - }; - + { + new Axis + { + Name = CurrentVariable?.Name ?? "值", + MinLimit = 0 // 设置Y轴从0开始 + } + }; + // 设置属性值 LineAxisX = _lineAxisXInstance; LineAxisY = _lineAxisYInstance; @@ -310,20 +319,20 @@ partial class VariableHistoryViewModel : ViewModelBase, INavigatable // 对于实时更新,保持原有完整的更新逻辑以确保数据一致性 // 创建数值点集合 var values = new List(); - + foreach (var history in _variableHistoryList) { // 尝试将值转换为double - values.Add(new DateTimePoint(history.Timestamp, history.NumericValue)); + values.Add(new DateTimePoint(history.Timestamp, history.NumericValue)); } // 更新当前系列 var currentSeries = (LineSeries)LineSeriesCollection[0]; currentSeries.Values = values; currentSeries.Name = CurrentVariable?.Name ?? "变量值"; - + // 通知系列更改,但保留当前轴的缩放状态(不需要更新轴) - OnPropertyChanged(nameof(LineSeriesCollection)); + // OnPropertyChanged(nameof(LineSeriesCollection)); } } } \ No newline at end of file