Files
CapMachine/CapMachine.Wpf/ViewModels/RealTimeChartViewModel.cs
Tyrone CT 914a8b3dbc 更改了CAN和LIN的标志着色问题
保存图片触发两次
CANLIN的一些数据回读到PLC
2025-01-12 15:32:02 +08:00

587 lines
21 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using AutoMapper;
using CapMachine.Core;
using CapMachine.Model;
using CapMachine.Wpf.Dtos;
using CapMachine.Wpf.PrismEvent;
using CapMachine.Wpf.Services;
using Prism.Commands;
using Prism.Events;
using Prism.Services.Dialogs;
using System.Collections.ObjectModel;
namespace CapMachine.Wpf.ViewModels
{
/// <summary>
/// 实时曲线的模型
/// </summary>
public class RealTimeChartViewModel : NavigationViewModel
{
/// <summary>
/// 实例化函数
/// </summary>
public RealTimeChartViewModel(IDialogService dialogService, IFreeSql freeSql, IEventAggregator eventAggregator, IMapper mapper,ConfigService configService)
{
DialogService = dialogService;
FreeSql = freeSql;
EventAggregator = eventAggregator;
Mapper = mapper;
ConfigService = configService;
ListChartTabGroupDto = Mapper.Map<List<ChartTabGroupDto>>(FreeSql.Select<ChartTabGroup>().Where(a => a.IsEnable == true).ToList());
//都要加载数据
EventAggregator.GetEvent<ChartRtSeriesActionEvent>().Publish(new ChartRtSeriesActionMsg() { Machine = "M1", GroupTabIndex = 0, ActionMsg = "Start" });
EventAggregator.GetEvent<ChartRtSeriesActionEvent>().Publish(new ChartRtSeriesActionMsg() { Machine = "M1", GroupTabIndex = 1, ActionMsg = "Start" });
EventAggregator.GetEvent<ChartRtSeriesActionEvent>().Publish(new ChartRtSeriesActionMsg() { Machine = "M1", GroupTabIndex = 2, ActionMsg = "Start" });
EventAggregator.GetEvent<ChartRtSeriesActionEvent>().Publish(new ChartRtSeriesActionMsg() { Machine = "M1", GroupTabIndex = 3, ActionMsg = "Start" });
EventAggregator.GetEvent<ChartRtSeriesActionEvent>().Publish(new ChartRtSeriesActionMsg() { Machine = "M1", GroupTabIndex = 4, ActionMsg = "Start" });
EventAggregator.GetEvent<ChartRtSeriesActionEvent>().Publish(new ChartRtSeriesActionMsg() { Machine = "M1", GroupTabIndex = 5, ActionMsg = "Start" });
}
/// <summary>
/// 弹窗服务
/// </summary>
public IDialogService DialogService { get; }
/// <summary>
/// AutoMap映射
/// </summary>
public IMapper Mapper { get; }
public ConfigService ConfigService { get; }
/// <summary>
/// FreeSQL 实例
/// </summary>
public IFreeSql FreeSql { get; }
private List<ChartTabGroupDto> _ListChartTabGroupDto;
/// <summary>
/// Tab集合信息数据
/// </summary>
public List<ChartTabGroupDto> ListChartTabGroupDto
{
get { return _ListChartTabGroupDto; }
set { _ListChartTabGroupDto = value; RaisePropertyChanged(); }
}
/// <summary>
/// 当前的Machine
/// </summary>
private string CurSelectedMachine { get; set; } = "M1";
#region TabIndex信息
private int _SeletedGroupTabIndex;
/// <summary>
/// 选中的Group TabIndex
/// </summary>
public int SeletedGroupTabIndex
{
get { return _SeletedGroupTabIndex; }
set { _SeletedGroupTabIndex = value; RaisePropertyChanged(); }
}
private int _SeletedGroup1ListViewTabIndex;
/// <summary>
/// 选中的Group1的 ListView TabIndex
/// 单游标和双游标的显示数据
/// </summary>
public int SeletedGroup1ListViewTabIndex
{
get { return _SeletedGroup1ListViewTabIndex; }
set { _SeletedGroup1ListViewTabIndex = value; RaisePropertyChanged(); }
}
private int _SeletedGroup2ListViewTabIndex;
/// <summary>
/// 选中的Group2的 ListView TabIndex
/// 单游标和双游标的显示数据
/// </summary>
public int SeletedGroup2ListViewTabIndex
{
get { return _SeletedGroup2ListViewTabIndex; }
set { _SeletedGroup2ListViewTabIndex = value; RaisePropertyChanged(); }
}
private int _SeletedGroup3ListViewTabIndex;
/// <summary>
/// 选中的Group3的 ListView TabIndex
/// 单游标和双游标的显示数据
/// </summary>
public int SeletedGroup3ListViewTabIndex
{
get { return _SeletedGroup3ListViewTabIndex; }
set { _SeletedGroup3ListViewTabIndex = value; RaisePropertyChanged(); }
}
private int _SeletedGroup4ListViewTabIndex;
/// <summary>
/// 选中的Group4的 ListView TabIndex
/// 单游标和双游标的显示数据
/// </summary>
public int SeletedGroup4ListViewTabIndex
{
get { return _SeletedGroup4ListViewTabIndex; }
set { _SeletedGroup4ListViewTabIndex = value; RaisePropertyChanged(); }
}
private int _SeletedGroup5ListViewTabIndex;
/// <summary>
/// 选中的Group5的 ListView TabIndex
/// 单游标和双游标的显示数据
/// </summary>
public int SeletedGroup5ListViewTabIndex
{
get { return _SeletedGroup5ListViewTabIndex; }
set { _SeletedGroup5ListViewTabIndex = value; RaisePropertyChanged(); }
}
private int _SeletedGroup6ListViewTabIndex;
/// <summary>
/// 选中的Group6的 ListView TabIndex
/// 单游标和双游标的显示数据
/// </summary>
public int SeletedGroup6ListViewTabIndex
{
get { return _SeletedGroup6ListViewTabIndex; }
set { _SeletedGroup6ListViewTabIndex = value; RaisePropertyChanged(); }
}
private int _SeletedGroup7ListViewTabIndex;
/// <summary>
/// 选中的Group7的 ListView TabIndex
/// 单游标和双游标的显示数据
/// </summary>
public int SeletedGroup7ListViewTabIndex
{
get { return _SeletedGroup7ListViewTabIndex; }
set { _SeletedGroup7ListViewTabIndex = value; RaisePropertyChanged(); }
}
private int _SeletedGroup8ListViewTabIndex;
/// <summary>
/// 选中的Group8的 ListView TabIndex
/// 单游标和双游标的显示数据
/// </summary>
public int SeletedGroup8ListViewTabIndex
{
get { return _SeletedGroup8ListViewTabIndex; }
set { _SeletedGroup8ListViewTabIndex = value; RaisePropertyChanged(); }
}
#endregion
/// <summary>
/// 事件聚合器
/// </summary>
public IEventAggregator EventAggregator { get; }
private DelegateCommand _ChartConfigCmd;
/// <summary>
/// 编辑曲线数据
/// </summary>
public DelegateCommand ChartConfigCmd
{
set
{
_ChartConfigCmd = value;
}
get
{
if (_ChartConfigCmd == null)
{
_ChartConfigCmd = new DelegateCommand(() => ChartConfigCmdMethod());
}
return _ChartConfigCmd;
}
}
/// <summary>
/// 编辑曲线数据执行方法
/// </summary>
private void ChartConfigCmdMethod()
{
//弹窗
DialogService.ShowDialog("DialogChartRtConfigView", new DialogParameters() { { "TabIndex", SeletedGroupTabIndex } }, (par) =>
{
if (par.Result == ButtonResult.OK)
{
//程序名称
var ReturnValue = par.Parameters.GetValue<string>("Name");
//返回数据刷新Chart
EventAggregator.GetEvent<ChartRtSeriesActionEvent>().Publish(new ChartRtSeriesActionMsg()
{
Machine = CurSelectedMachine,
GroupTabIndex = SeletedGroupTabIndex,
ActionMsg = "Start"
});
}
else if (par.Result == ButtonResult.Cancel)
{
//取消
}
});
}
private DelegateCommand<object> _BtnSwitchGroupCmd;
/// <summary>
/// 切换组的指令
/// </summary>
public DelegateCommand<object> BtnSwitchGroupCmd
{
set
{
_BtnSwitchGroupCmd = value;
}
get
{
if (_BtnSwitchGroupCmd == null)
{
_BtnSwitchGroupCmd = new DelegateCommand<object>((p) => BtnSwitchGroupCmdMethod(p));
}
return _BtnSwitchGroupCmd;
}
}
private void BtnSwitchGroupCmdMethod(object par)
{
var Data = (ChartTabGroupDto)par;
SeletedGroupTabIndex = Data.Index;
EventAggregator.GetEvent<ChartTabGroupSwitchEvent>().Publish(new ChartTabGroupSwitchMsg()
{
Machine = CurSelectedMachine,
GroupTabIndex = SeletedGroupTabIndex
});
//switch (Data.Index)
//{
// case 0:
// SeletedGroupTabIndex = Data.Index;
// EventAggregator.GetEvent<ChartGroupSwitchEvent>().Publish(Data.Name);
// break;
// case 1:
// SeletedGroupTabIndex = Data.Index;
// EventAggregator.GetEvent<ChartGroupSwitchEvent>().Publish(Data.Name);
// break;
// case 2:
// SeletedGroupTabIndex = Data.Index;
// EventAggregator.GetEvent<ChartGroupSwitchEvent>().Publish(Data.Name);
// break;
// default:
// break;
//}
}
private DelegateCommand<object> _BtnChartSetCmd;
/// <summary>
/// Chart 设置命令 多次设置
/// </summary>
public DelegateCommand<object> BtnChartSetCmd
{
set
{
_BtnChartSetCmd = value;
}
get
{
if (_BtnChartSetCmd == null)
{
_BtnChartSetCmd = new DelegateCommand<object>((p) => BtnChartSetCmdMethod(p));
}
return _BtnChartSetCmd;
}
}
private void BtnChartSetCmdMethod(object par)
{
//两个动作曲线显示游标和不同的游标对应不同的ListView信息
var Info = (string)par;
switch (Info)
{
case "单游标":
//单双游标需要界面配合切换ListView信息
SwitchListViewTab(SeletedGroupTabIndex, "单游标");
//Chart操作
EventAggregator.GetEvent<ChartSetEvent>().Publish(new ChartSetMsg() { Machine = CurSelectedMachine, GroupTabIndex = SeletedGroupTabIndex, ChartSetInfo = "单游标" });
break;
case "双游标":
//单双游标需要界面配合切换ListView信息
SwitchListViewTab(SeletedGroupTabIndex, "双游标");
//Chart操作
EventAggregator.GetEvent<ChartSetEvent>().Publish(new ChartSetMsg() { Machine = CurSelectedMachine, GroupTabIndex = SeletedGroupTabIndex, ChartSetInfo = "双游标" });
break;
case "游标置中":
//Chart操作
EventAggregator.GetEvent<ChartSetEvent>().Publish(new ChartSetMsg() { Machine = CurSelectedMachine, GroupTabIndex = SeletedGroupTabIndex, ChartSetInfo = "游标置中" });
break;
case "游标放大":
//Chart操作
EventAggregator.GetEvent<ChartSetEvent>().Publish(new ChartSetMsg() { Machine = CurSelectedMachine, GroupTabIndex = SeletedGroupTabIndex, ChartSetInfo = "游标放大" });
break;
case "保存照片":
//临时的屏蔽状态
ConfigService.ChartSavePageTempState = true;
//Chart操作
EventAggregator.GetEvent<ChartSetEvent>().Publish(new ChartSetMsg() { Machine = CurSelectedMachine, GroupTabIndex = SeletedGroupTabIndex, ChartSetInfo = "保存照片" });
break;
default:
break;
}
}
private DelegateCommand<object> _BtnChartScrollEnableSetCmd;
/// <summary>
/// Chart 启用和非启用的设置命令 带有状态的
/// 实时滚动
/// </summary>
public DelegateCommand<object> BtnChartScrollEnableSetCmd
{
set
{
_BtnChartScrollEnableSetCmd = value;
}
get
{
if (_BtnChartScrollEnableSetCmd == null)
{
_BtnChartScrollEnableSetCmd = new DelegateCommand<object>((p) => BtnChartScrollEnableSetCmdMethod(p));
}
return _BtnChartScrollEnableSetCmd;
}
}
private void BtnChartScrollEnableSetCmdMethod(object par)
{
//是否滚动设置
var Result = (bool)par;
EventAggregator.GetEvent<ChartSetEnableEvent>().Publish(new ChartSetEnableMsg() { Machine = CurSelectedMachine, GroupTabIndex = SeletedGroupTabIndex, ChartSetInfo = "实时滚动", Enable = Result });
}
private DelegateCommand<object> _BtnChartLegendHideEnableSetCmd;
/// <summary>
/// Chart 启用和非启用的设置命令 带有状态的
/// 图例隐藏
/// </summary>
public DelegateCommand<object> BtnChartLegendHideEnableSetCmd
{
set
{
_BtnChartLegendHideEnableSetCmd = value;
}
get
{
if (_BtnChartLegendHideEnableSetCmd == null)
{
_BtnChartLegendHideEnableSetCmd = new DelegateCommand<object>((p) => BtnChartLegendHideEnableSetCmdMethod(p));
}
return _BtnChartLegendHideEnableSetCmd;
}
}
private void BtnChartLegendHideEnableSetCmdMethod(object par)
{
//是否滚动设置
var Result = (bool)par;
EventAggregator.GetEvent<ChartSetEnableEvent>().Publish(new ChartSetEnableMsg() { Machine = CurSelectedMachine, GroupTabIndex = SeletedGroupTabIndex, ChartSetInfo = "隐藏图例", Enable = Result });
}
private DelegateCommand<object> _TabItemCmd;
/// <summary>
/// Tab内容编辑命令
/// </summary>
public DelegateCommand<object> TabItemCmd
{
set
{
_TabItemCmd = value;
}
get
{
if (_TabItemCmd == null)
{
_TabItemCmd = new DelegateCommand<object>((p) => TabItemCmdMethod());
}
return _TabItemCmd;
}
}
private void TabItemCmdMethod()
{
//弹窗
DialogService.ShowDialog("DialogChartGroupTabView", new DialogParameters() { { "Name", "" } }, (par) =>
{
if (par.Result == ButtonResult.OK)
{
//程序名称
ListChartTabGroupDto = par.Parameters.GetValue<List<ChartTabGroupDto>>("NewData");
//返回数据刷新Chart
}
else if (par.Result == ButtonResult.Cancel)
{
//取消
}
});
}
/// <summary>
/// 切换ListViewTab的信息
/// </summary>
private void SwitchListViewTab(int GroupIndex, string Msg)
{
//全部组同时设置
if (Msg == "单游标")
{
SeletedGroup1ListViewTabIndex = 0;
SeletedGroup2ListViewTabIndex = 0;
SeletedGroup3ListViewTabIndex = 0;
SeletedGroup4ListViewTabIndex = 0;
SeletedGroup5ListViewTabIndex = 0;
SeletedGroup6ListViewTabIndex = 0;
SeletedGroup7ListViewTabIndex = 0;
SeletedGroup8ListViewTabIndex = 0;
}
else
{
SeletedGroup1ListViewTabIndex = 1;
SeletedGroup2ListViewTabIndex = 1;
SeletedGroup3ListViewTabIndex = 1;
SeletedGroup4ListViewTabIndex = 1;
SeletedGroup5ListViewTabIndex = 1;
SeletedGroup6ListViewTabIndex = 1;
SeletedGroup7ListViewTabIndex = 1;
SeletedGroup8ListViewTabIndex = 1;
}
//只设置当前的组
//switch (GroupIndex)
//{
// case 0:
// if (Msg == "单游标")
// {
// SeletedGroup1ListViewTabIndex = 0;
// return;
// }
// SeletedGroup1ListViewTabIndex = 1;
// break;
// case 1:
// if (Msg == "单游标")
// {
// SeletedGroup2ListViewTabIndex = 0;
// return;
// }
// SeletedGroup2ListViewTabIndex = 1;
// break;
// case 2:
// if (Msg == "单游标")
// {
// SeletedGroup3ListViewTabIndex = 0;
// return;
// }
// SeletedGroup3ListViewTabIndex = 1;
// break;
// case 3:
// if (Msg == "单游标")
// {
// SeletedGroup4ListViewTabIndex = 0;
// return;
// }
// SeletedGroup4ListViewTabIndex = 1;
// break;
// case 4:
// if (Msg == "单游标")
// {
// SeletedGroup5ListViewTabIndex = 0;
// return;
// }
// SeletedGroup5ListViewTabIndex = 1;
// break;
// case 5:
// if (Msg == "单游标")
// {
// SeletedGroup6ListViewTabIndex = 0;
// return;
// }
// SeletedGroup6ListViewTabIndex = 1;
// break;
// case 6:
// if (Msg == "单游标")
// {
// SeletedGroup7ListViewTabIndex = 0;
// return;
// }
// SeletedGroup7ListViewTabIndex = 1;
// break;
// case 7:
// if (Msg == "单游标")
// {
// SeletedGroup8ListViewTabIndex = 0;
// return;
// }
// SeletedGroup8ListViewTabIndex = 1;
// break;
// default:
// break;
//}
}
private DelegateCommand _ChartYAxisConfigCmd;
/// <summary>
/// 编辑曲线Y轴配置的数据
/// </summary>
public DelegateCommand ChartYAxisConfigCmd
{
set
{
_ChartYAxisConfigCmd = value;
}
get
{
if (_ChartYAxisConfigCmd == null)
{
_ChartYAxisConfigCmd = new DelegateCommand(() => ChartYAxisConfigCmdMethod());
}
return _ChartYAxisConfigCmd;
}
}
private void ChartYAxisConfigCmdMethod()
{
//弹窗
DialogService.ShowDialog("DialogYAxisConfigView", new DialogParameters() { { "Name", "" } }, (par) =>
{
if (par.Result == ButtonResult.OK)
{
//程序名称
//ListChartTabGroupDto = par.Parameters.GetValue<List<ChartTabGroupDto>>("NewData");
//返回数据刷新Chart
var Data = FreeSql.Select<ConfigChartYAxis>().ToList();
EventAggregator.GetEvent<ChartYAxisConfigEvent>().Publish(new ChartYAxisConfigMsg() { Machine = CurSelectedMachine, GroupTabIndex = SeletedGroupTabIndex, ConfigChartYAxes = Data });
}
else if (par.Result == ButtonResult.Cancel)
{
//取消
}
});
}
}
}