diff --git a/ADP/ViewModels/ShellViewModel.cs b/ADP/ViewModels/ShellViewModel.cs index d415a2b..cc1e510 100644 --- a/ADP/ViewModels/ShellViewModel.cs +++ b/ADP/ViewModels/ShellViewModel.cs @@ -150,6 +150,7 @@ namespace ADP.ViewModels public ICommand ShowDialogManagerViewCommand { get; set; } public ICommand SelectCANSignalMonitorCommand { get; set; } public ICommand SelectCANMessageCommand { get; set; } + public ICommand MonitorValueSettingCommand { get; set; } public ICommand GetFileStringCommand { get; set; } #endregion @@ -182,6 +183,7 @@ namespace ADP.ViewModels SetDefaultCommand = new DelegateCommand(SetDefault); SelectCANSignalMonitorCommand = new DelegateCommand(SelectCANSignalMonitor); SelectCANMessageCommand = new DelegateCommand(SelectCANMessage); + MonitorValueSettingCommand = new DelegateCommand(MonitorValueSetting); GetFileStringCommand = new DelegateCommand(GetFileString); _globalInfo.ContextDic.Add("default", new ScopedContext()); @@ -205,7 +207,7 @@ namespace ADP.ViewModels _uiRefreshTimer.Start(); } - + private void RefreshAllContextProperties() { RaisePropertyChanged(nameof(RunState)); @@ -232,12 +234,24 @@ namespace ADP.ViewModels }); } } + private void MonitorValueSetting() + { + if ( _globalInfo.CurrentScope == "default") + { + LoggerHelper.Warn("当前作用域未配置 CAN 设备,无法打开报文选择窗口。"); + return; + } + _dialogService.ShowDialog("ValueLimitView", new DialogParameters + { + { "Scope", _globalInfo.ScopeDic[_globalInfo.CurrentScope] } + }, _ => { }); + } + private void SelectCANSignalMonitor() { var canfd = CurrentConfig?.CANFD; if (canfd == null || _globalInfo.CurrentScope == "default") { - LoggerHelper.Warn("当前作用域未配置 CAN 设备,无法打开报文选择窗口。"); return; } diff --git a/ADP/Views/ShellView.xaml b/ADP/Views/ShellView.xaml index 52d0df6..310b365 100644 --- a/ADP/Views/ShellView.xaml +++ b/ADP/Views/ShellView.xaml @@ -167,7 +167,15 @@ Command="{Binding SelectCANSignalMonitorCommand}"> Foreground="Black" /> - + + + + + + @@ -175,7 +183,7 @@ Command="{Binding SelectCANMessageCommand}"> - + ("MonitorView"); containerRegistry.RegisterForNavigation("RecordView"); + containerRegistry.RegisterDialog("ValueLimitView"); } } diff --git a/MonitorModule/ViewModels/Dialogs/ValueLimitViewModel.cs b/MonitorModule/ViewModels/Dialogs/ValueLimitViewModel.cs new file mode 100644 index 0000000..8de91b4 --- /dev/null +++ b/MonitorModule/ViewModels/Dialogs/ValueLimitViewModel.cs @@ -0,0 +1,153 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Input; +using UIShare.GlobalVariable; +using UIShare.UIViewModel; +using UIShare.ViewModelBase; + +namespace MonitorModule.ViewModels.Dialogs +{ + public class ValueLimitViewModel : DialogViewModelBase + { + #region 属性 + private string _Title = "报警设置"; + + public string Title + { + get { return _Title; } + set { SetProperty(ref _Title, value); } + } + + private ValueLimitVM _SelectValueLimitVM; + + public ValueLimitVM SelectValueLimitVM + { + get => _SelectValueLimitVM; + set => SetProperty(ref _SelectValueLimitVM, value); + } + private ObservableCollection _ValueLimitList; + public ObservableCollection ValueLimitList + { + get => _ValueLimitList; + set => SetProperty(ref _ValueLimitList, value); + } + private ObservableCollection _DeviceSingleList = new(); + + public ObservableCollection DeviceSingleList + { + get => _DeviceSingleList; + set => SetProperty(ref _DeviceSingleList, value); + } + private string _SelectCurve; + + public string SelectCurve + { + get => _SelectCurve; + set => SetProperty(ref _SelectCurve, value); + } + + #endregion + #region 命令 + public ICommand SaveCommand { get; set; } + public ICommand CloseCommand { get; set; } + public ICommand SelectSignalCommand { get; set; } + public ICommand DeleteCommand { get; set; } + + #endregion + private GlobalInfo _globalInfo { get; set; } + private SystemConfig _systemConfig { get; set; } + private IScopedProvider _scope { get; set; } + public ValueLimitViewModel(IContainerProvider containerProvider) : base(containerProvider) + { + _globalInfo = containerProvider.Resolve(); + _eventAggregator = containerProvider.Resolve(); + SaveCommand = new DelegateCommand(OnSave); + CloseCommand = new DelegateCommand(OnClose); + SelectSignalCommand = new DelegateCommand(SelectSignal); + DeleteCommand = new DelegateCommand(Deletel); + InitData(); + } + #region 命令处理 + private void Deletel() + { + if (SelectValueLimitVM == null) + { + return; + } + else + { + ValueLimitList.Remove(SelectValueLimitVM); + SelectValueLimitVM = null; + } + } + + + private void InitData() + { + //ValueLimitList = new(_systemConfig.ValueLimitList); + //foreach (var _PollingRead in _devices.PollingReadDic) + //{ + // string deviceName = _PollingRead.Key; + // PollingRead pollingRead = _PollingRead.Value; + + // var props = pollingRead.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance) + // .Where(p => p.PropertyType == typeof(double)); + + // foreach (var prop in props) + // { + // DeviceSingleList.Add(deviceName + "." + prop.Name); + // } + //} + //foreach (var Signal in _systemConfig.ConfigurationList) + //{ + // DeviceSingleList.Add($"{Signal.Channel}/{Signal.MessageName}/{Signal.SignalName}"); + //} + } + + private void SelectSignal() + { + if (ValueLimitList.Where(x => x.SignalName == SelectCurve).Count() > 0) + { + return; + } + ValueLimitList.Add(new ValueLimitVM + { + SignalName = SelectCurve, + Upper = 9999, + Lower = -9999, + UpperExtreme = 9999, + LowerExtreme = -9999, + }); + } + + private void OnClose() + { + RequestClose.Invoke(); + } + + private void OnSave() + { + _systemConfig.ValueLimitList = ValueLimitList; + ConfigService.Save(_systemConfig); + } + #endregion + public override void OnDialogOpened(IDialogParameters parameters) + { + // 1. 优先执行基类的打开逻辑(如果基类有需要初始化的通用事务) + base.OnDialogOpened(parameters); + + // 2. 解析参数 + if (parameters != null && parameters.ContainsKey("Scope")) // 修复:Prism 中应使用 ContainsKey + { + _scope = parameters.GetValue("Scope"); + _systemConfig= _scope.Resolve(); + } + } + } +} diff --git a/MonitorModule/Views/Dialogs/ValueLimitView.xaml b/MonitorModule/Views/Dialogs/ValueLimitView.xaml new file mode 100644 index 0000000..3eddfcd --- /dev/null +++ b/MonitorModule/Views/Dialogs/ValueLimitView.xaml @@ -0,0 +1,110 @@ + + +