周立功换同星

This commit is contained in:
“hsc”
2026-07-29 14:20:32 +08:00
parent d8a22a15b1
commit 3bf33bb561
29 changed files with 1913 additions and 3255 deletions

View File

@@ -1,29 +1,26 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Channels;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
using UIShare.ViewModelBase;
using ZLGUSBCANFD;
using TSMasterCAN;
using UIShare.UIViewModel;
namespace CANModule.ViewModels
{
public class SelectCanMessageViewModel : DialogViewModelBase
public class SelectCanMessageViewModel : BindableBase, IDialogAware
{
#region
private ZLGCANFD? _canfd;
#endregion
#region
public DialogCloseListener RequestClose { get; set; }
private ObservableCollection<int> _ChannelList;
public ObservableCollection<int> ChannelList
{
get => _ChannelList;
set => SetProperty(ref _ChannelList, value);
}
private ObservableCollection<string> _messageList;
public ObservableCollection<string> MessageList
{
@@ -44,7 +41,6 @@ namespace CANModule.ViewModels
get => _title;
set => SetProperty(ref _title, value);
}
private string _selectedMessage;
public string SelectedMessage
{
@@ -53,27 +49,9 @@ namespace CANModule.ViewModels
{
if (SetProperty(ref _selectedMessage, value))
{
if (!string.IsNullOrEmpty(value) && _canfd != null)
if (value != null && value != "")
{
var db = _canfd.DBCParser.MsgDatabase;
if (MessageChannel >= 0 && MessageChannel < db.Count)
{
var targetMsg = db[MessageChannel]
.FirstOrDefault(x => $"[0x{x.msg_id:X}]{x.msg_name}" == value);
if (targetMsg != null && targetMsg.signal_Name != null)
{
SignalList = new ObservableCollection<string>(targetMsg.signal_Name);
}
else
{
SignalList = new ObservableCollection<string>();
}
}
}
else
{
SignalList = new ObservableCollection<string>();
SignalList = new(DBCParse.MsgDatabase[MessageChannel].Where(x => $"[0x{x.msg_id:X}]{x.msg_name}" == value).First().signal_Name);
}
}
}
@@ -85,8 +63,7 @@ namespace CANModule.ViewModels
get => _selectedSignal;
set => SetProperty(ref _selectedSignal, value);
}
private int _MessageChannel = -1;
private int _MessageChannel;
public int MessageChannel
{
get => _MessageChannel;
@@ -94,94 +71,84 @@ namespace CANModule.ViewModels
{
if (_MessageChannel != value)
{
_MessageChannel = value;
// 1. 先安全清空旧的选择项和信号列表
_MessageChannel=value;
MessageList = new(DBCParse.MsgDatabase[value].Select(s => $"[0x{s.msg_id:X}]{s.msg_name}"));
SignalList = new();
SelectedMessage = null;
SelectedSignal = null;
SignalList = new ObservableCollection<string>();
// 2. 刷新当前通道的报文列表
if (_canfd != null)
{
var db = _canfd.DBCParser.MsgDatabase;
if (db != null && value >= 0 && value < db.Count)
{
MessageList = new ObservableCollection<string>(
db[value].Select(s => $"[0x{s.msg_id:X}]{s.msg_name}")
);
}
else
{
MessageList = new ObservableCollection<string>();
}
}
else
{
MessageList = new ObservableCollection<string>();
}
RaisePropertyChanged();
}
}
}
#endregion
#region
public ICommand CloseCommand { get; set; }
public ICommand GetSelectedMessageCommand { get; set; }
public ICommand GetSelectedSignalCommand { get; set; }
public ICommand LoadCommand { get; set; }
#endregion
public SelectCanMessageViewModel(IContainerProvider containerProvider) : base(containerProvider)
public DialogCloseListener RequestClose { get; set; }
public SelectCanMessageViewModel()
{
CloseCommand = new DelegateCommand(Close);
GetSelectedMessageCommand = new DelegateCommand(GetSelectedMessage);
GetSelectedSignalCommand = new DelegateCommand(GetSelectedSignal);
LoadCommand = new DelegateCommand(Load);
}
#region Dialog
public override void OnDialogOpened(IDialogParameters parameters)
{
_canfd = parameters.GetValue<ZLGCANFD>("CANFD");
}
#endregion
#region
private void Close()
{
RequestClose.Invoke();
}
private void Load()
{
int maxCh = _canfd?.DBCParser.MaxChannels ?? 4;
ChannelList = new ObservableCollection<int>(Enumerable.Range(0, maxCh));
ChannelList = new ObservableCollection<int>(Enumerable.Range(0, 12));
}
private void GetSelectedSignal()
{
if (!string.IsNullOrEmpty(SelectedSignal))
if (SelectedSignal!=null)
{
Application.Current.Dispatcher.Invoke(() =>
{
Clipboard.SetDataObject(SelectedSignal);
});
}
else
{
}
}
private void GetSelectedMessage()
{
if (!string.IsNullOrEmpty(SelectedMessage) && SelectedMessage.Contains(']'))
if (SelectedSignal != null)
{
Application.Current.Dispatcher.Invoke(() =>
{
Clipboard.SetDataObject(SelectedMessage);
Clipboard.SetDataObject(SelectedMessage.Split("]")[1]);
});
}
else
{
}
}
private void Close()
{
RequestClose.Invoke();
}
public bool CanCloseDialog()
{
return true;
}
public void OnDialogClosed()
{
}
public void OnDialogOpened(IDialogParameters parameters)
{
MessageList = new(DBCParse.MsgDatabase[0].Select(s => $"[0x{s.msg_id:X}]{s.msg_name}"));
}
#endregion
}
}