diff --git a/ACP/ViewModels/ShellViewModel.cs b/ACP/ViewModels/ShellViewModel.cs index c9c5ef3..e4bfeec 100644 --- a/ACP/ViewModels/ShellViewModel.cs +++ b/ACP/ViewModels/ShellViewModel.cs @@ -18,6 +18,7 @@ using UIShare.GlobalVariable; using UIShare.PubEvent; using UIShare.UIViewModel; using SqlSugar; +using TSMasterCAN; namespace ACP.ViewModels { @@ -155,6 +156,7 @@ namespace ACP.ViewModels public ICommand MonitorValueSettingCommand { get; set; } public ICommand GetFileStringCommand { get; set; } public ICommand SilenceBuzzerCommand { get; set; } + public ICommand SettingChannelCommand { get; set; } #endregion public ShellViewModel(IContainerProvider containerProvider) @@ -204,7 +206,8 @@ namespace ACP.ViewModels MonitorValueSettingCommand = new DelegateCommand(MonitorValueSetting); GetFileStringCommand = new DelegateCommand(GetFileString); SilenceBuzzerCommand = new AsyncDelegateCommand(SilenceBuzzer); - + SettingChannelCommand = new AsyncDelegateCommand(SilenceBuzzer); + SettingChannelCommand = new DelegateCommand(SettingChannel); _globalInfo.ContextDic.Add("default", new ScopedContext()); _eventAggregator.GetEvent().Subscribe(() => @@ -237,7 +240,16 @@ namespace ACP.ViewModels } #region 命令处理与事件 - + private void SettingChannel() + { + var re = CAN.ShowChannelMappingWindow(true); + if (re != 0) + { + var msg = CAN.GetErrorDescription(re); + if(CurrentConfig!=null) + LoggerHelper.ErrorWithNotify(CurrentConfig.Title,$"同星通道映射界面打开失败:{msg}"); + } + } private async Task SilenceBuzzer() { _eventAggregator.GetEvent().Publish(_globalInfo.CurrentScope); diff --git a/ACP/Views/ShellView.xaml b/ACP/Views/ShellView.xaml index 8eb0a43..8217e35 100644 --- a/ACP/Views/ShellView.xaml +++ b/ACP/Views/ShellView.xaml @@ -190,15 +190,19 @@ Foreground="Black" /> - - - - - + + + + + Foreground="Black" /> - - - - - - + ("SelectCanMessageView"); containerRegistry.RegisterDialog("CollectCANSignalSettingView"); + containerRegistry.RegisterDialog("DBCInfo"); containerRegistry.RegisterForNavigation("CANView"); + containerRegistry.Register(); } } } diff --git a/CANModule/ViewModels/CANViewModel.cs b/CANModule/ViewModels/CANViewModel.cs index 0f486aa..67585f0 100644 --- a/CANModule/ViewModels/CANViewModel.cs +++ b/CANModule/ViewModels/CANViewModel.cs @@ -18,10 +18,11 @@ using System.Windows.Threading; using TSMasterCAN; using UIShare.GlobalVariable; using UIShare.UIViewModel; +using UIShare.ViewModelBase; namespace CANModule.ViewModels { - public class CANViewModel : BindableBase, IDialogAware + public class CANViewModel : NavigateViewModelBase { #region 属性 @@ -269,17 +270,15 @@ namespace CANModule.ViewModels #endregion private IEventAggregator _eventAggregator { get; set; } - private CAN? _canfd; private SystemConfig? _systemConfig; private readonly DeviceManager _deviceManager; private IDialogService _dialogService { get; set; } CancellationTokenSource cts = new CancellationTokenSource(); - public CANViewModel(IContainerProvider containerProvider) + public CANViewModel(IContainerProvider containerProvider) : base(containerProvider) { _eventAggregator = containerProvider.Resolve(); _systemConfig = containerProvider.Resolve(); _deviceManager = containerProvider.Resolve(); - _canfd = _deviceManager.CANFD; _dialogService = containerProvider.Resolve(); SelectBLFPathCommand = new DelegateCommand(SelectBLFPath); SaveBLFPathCommand = new DelegateCommand(SaveBLFPath); @@ -299,6 +298,7 @@ namespace CANModule.ViewModels LoadMessageCommand = new DelegateCommand(LoadMessage); DeleteDcAutoLoadCommand = new DelegateCommand(DeleteDcAutoLoad); SendCustomMessageCommand = new DelegateCommand(SendCustomMessage); + Task.Run(() => Refresh(cts.Token), cts.Token); } #region 命令 @@ -496,7 +496,7 @@ namespace CANModule.ViewModels { while (ct.IsCancellationRequested == false) { - var temp = CAN.RealTimeMessages.Select(s => s.Value).ToArray(); + var temp = _deviceManager._CANMonitoringService.RealTimeMessages.Select(s => s.Value).ToArray(); foreach (var item in temp) { var find = CanMessageList.FirstOrDefault(s => s.报文ID == item.FIdentifier); @@ -571,6 +571,10 @@ namespace CANModule.ViewModels } public void OnDialogOpened(IDialogParameters parameters) + { + + } + public override void OnNavigatedTo(NavigationContext context) { Task.Run(() => Refresh(cts.Token), cts.Token); } diff --git a/CANModule/ViewModels/DBCInfoViewModel.cs b/CANModule/ViewModels/DBCInfoViewModel.cs new file mode 100644 index 0000000..31f66fb --- /dev/null +++ b/CANModule/ViewModels/DBCInfoViewModel.cs @@ -0,0 +1,138 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Configuration; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Input; +using Model; +using Model.Models; +using TSMasterCAN; +using UIShare.GlobalVariable; +using UIShare.PubEvent; +using UIShare.UIViewModel; + +namespace CANModule.ViewModels +{ + public class DBCInfoViewModel :BindableBase, IDialogAware + { + private can_network _can_Network; + + public required can_network can_Network + { + get { return _can_Network; } + set { SetProperty(ref _can_Network, value); } + } + private List<_Msg_> _MessageInfo; + + public required List<_Msg_> MessageInfo + { + get { return _MessageInfo; } + set { SetProperty(ref _MessageInfo, value); } + } + private ObservableCollection _CanNetWorkNode = new(); + public ObservableCollection CanNetWorkNode + { + get => _CanNetWorkNode; + set => SetProperty(ref _CanNetWorkNode, value); + } + private ObservableCollection _MessgaeNode = new(); + public ObservableCollection MessgaeNode + { + get => _MessgaeNode; + set => SetProperty(ref _MessgaeNode, value); + } + public ICommand CloseCommand { get; set; } + public DialogCloseListener RequestClose { get; set; } + public DBCInfoViewModel() + { + CloseCommand = new DelegateCommand(Close); + } + + private void Close() + { + RequestClose.Invoke(); + } + + public bool CanCloseDialog() + { + return true; + } + + public void OnDialogClosed() + { + + } + + public void OnDialogOpened(IDialogParameters parameters) + { + if (parameters.ContainsKey("can_Network")) + { + can_Network = parameters.GetValue("can_Network"); + } + + if (parameters.ContainsKey("MsgDatabase")) + { + MessageInfo = parameters.GetValue>("MsgDatabase"); + } + InitTreeNode(); + } + + private void InitTreeNode() + { + foreach(var item in can_Network.can_nodes) + { + var tx = new ObservableCollection(); + var rx = new ObservableCollection(); + foreach (var can_Message in item.rx_can_Messages) + { + rx.Add(new InstructionNode + { + Name = can_Message.message_name + }); + } + foreach (var can_Message in item.tx_can_Messages) + { + tx.Add(new InstructionNode + { + Name = can_Message.message_name + }); + } + var children = new ObservableCollection(); + children.Add(new InstructionNode + { + Name = "TX", + Children = tx + }); + children.Add(new InstructionNode + { + Name = "RX", + Children = rx + }); + CanNetWorkNode.Add(new InstructionNode + { + Name = item.node_name, + Children = children + }); + } + foreach(var item in MessageInfo) + { + var children = new ObservableCollection(); + foreach(var Signalname in item.signal_Name) + { + children.Add(new InstructionNode + { + Name = Signalname + }); + } + string hexValue = "[0x" + item.msg_id.ToString("X") + "]"; + MessgaeNode.Add(new InstructionNode + { + Name = hexValue+item.msg_name, + Children=children + }); + } + } + } +} diff --git a/CANModule/Views/CANView.xaml b/CANModule/Views/CANView.xaml index 61022fa..0d36568 100644 --- a/CANModule/Views/CANView.xaml +++ b/CANModule/Views/CANView.xaml @@ -34,12 +34,12 @@ Foreground="White" VerticalAlignment="Center" Margin="5,0,10,0" /> -