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 TSMasterCAN; using UIShare.UIViewModel; namespace CANModule.ViewModels { public class SelectCanMessageViewModel : BindableBase, IDialogAware { #region 属性 private ObservableCollection _ChannelList; public ObservableCollection ChannelList { get => _ChannelList; set => SetProperty(ref _ChannelList, value); } private ObservableCollection _messageList; public ObservableCollection MessageList { get => _messageList; set => SetProperty(ref _messageList, value); } private ObservableCollection _signalList; public ObservableCollection SignalList { get => _signalList; set => SetProperty(ref _signalList, value); } private string _title = "CollectCANSignalSetting"; public string Title { get => _title; set => SetProperty(ref _title, value); } private string _selectedMessage; public string SelectedMessage { get => _selectedMessage; set { if (SetProperty(ref _selectedMessage, value)) { if (value != null && value != "") { SignalList = new(DBCParse.MsgDatabase[MessageChannel].Where(x => $"[0x{x.msg_id:X}]{x.msg_name}" == value).First().signal_Name); } } } } private string _selectedSignal; public string SelectedSignal { get => _selectedSignal; set => SetProperty(ref _selectedSignal, value); } private int _MessageChannel; public int MessageChannel { get => _MessageChannel; set { if (_MessageChannel != value) { _MessageChannel=value; MessageList = new(DBCParse.MsgDatabase[value].Select(s => $"[0x{s.msg_id:X}]{s.msg_name}")); SignalList = new(); SelectedMessage = null; SelectedSignal = null; RaisePropertyChanged(); } } } #endregion public ICommand CloseCommand { get; set; } public ICommand GetSelectedMessageCommand { get; set; } public ICommand GetSelectedSignalCommand { get; set; } public ICommand LoadCommand { get; set; } public DialogCloseListener RequestClose { get; set; } public SelectCanMessageViewModel() { CloseCommand = new DelegateCommand(Close); GetSelectedMessageCommand = new DelegateCommand(GetSelectedMessage); GetSelectedSignalCommand = new DelegateCommand(GetSelectedSignal); LoadCommand = new DelegateCommand(Load); } private void Load() { ChannelList = new ObservableCollection(Enumerable.Range(0, 12)); } private void GetSelectedSignal() { if (SelectedSignal!=null) { Application.Current.Dispatcher.Invoke(() => { Clipboard.SetDataObject(SelectedSignal); }); } else { } } private void GetSelectedMessage() { if (SelectedSignal != null) { Application.Current.Dispatcher.Invoke(() => { 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}")); } } }