Files
ACP/CurveModule/ViewModels/Dialogs/CurveStatisticsViewModel.cs
2026-07-31 09:03:09 +08:00

96 lines
2.7 KiB
C#

using Prism.Commands;
using System.Collections.ObjectModel;
using System.Windows.Input;
using UIShare.PubEvent;
using UIShare.ViewModelBase;
namespace CurveModule.ViewModels.Dialogs
{
/// <summary>
/// 曲线统计结果弹窗 ViewModel。
/// </summary>
public class CurveStatisticsViewModel : DialogViewModelBase
{
#region
private string _title = "曲线数学统计";
public string Title
{
get => _title;
set => SetProperty(ref _title, value);
}
public ObservableCollection<CurveStatisticsResult> Results { get; } = new();
#endregion
#region
public ICommand CloseCommand { get; }
#endregion
public CurveStatisticsViewModel(IContainerProvider containerProvider) : base(containerProvider)
{
CloseCommand = new DelegateCommand(Close);
}
private void Close()
{
RequestClose.Invoke(ButtonResult.OK);
}
#region Prism Dialog
public override void OnDialogClosed()
{
_eventAggregator.GetEvent<OverlayEvent>().Publish(false);
}
public override void OnDialogOpened(IDialogParameters parameters)
{
_eventAggregator.GetEvent<OverlayEvent>().Publish(true);
if (parameters.ContainsKey("Results"))
{
var list = parameters.GetValue<ObservableCollection<CurveStatisticsResult>>("Results");
Results.Clear();
foreach (var item in list)
Results.Add(item);
}
}
#endregion
}
/// <summary>
/// 单条曲线的数学统计结果。
/// </summary>
public class CurveStatisticsResult
{
/// <summary>曲线名称</summary>
public string DisplayName { get; set; } = string.Empty;
/// <summary>数据点数</summary>
public int PointCount { get; set; }
/// <summary>最大值</summary>
public double Max { get; set; }
/// <summary>最小值</summary>
public double Min { get; set; }
/// <summary>平均值</summary>
public double Average { get; set; }
/// <summary>线性回归斜率(单位/秒)</summary>
public double Slope { get; set; }
/// <summary>梯形积分值(单位·秒)</summary>
public double Integral { get; set; }
public string MaxText => Max.ToString("G6");
public string MinText => Min.ToString("G6");
public string AverageText => Average.ToString("G6");
public string SlopeText => Slope.ToString("G6");
public string IntegralText => Integral.ToString("G6");
}
}